#include "sysctl-util.h"
#include "terminal-util.h"
+static bool arg_continuous = false;
+
static int help(void) {
_cleanup_free_ char *link = NULL;
int r;
"as a string and a QR code.\n\n%s"
" -h --help Show this help\n"
" --version Show package version\n"
+ " -c --continuous Make systemd-bsod wait continuously\n"
+ "for changes in the journal\n"
"\nSee the %s for details.\n",
program_invocation_short_name,
ansi_highlight(),
if (r < 0)
return log_error_errno(r, "Failed to seek to start of jornal: %m");
- r = sd_journal_next(j);
- if (r < 0)
- return log_error_errno(r, "Failed to read next journal entry: %m");
- if (r == 0) {
- log_debug("No emergency level entries in the journal");
- *ret = NULL;
- return 0;
+ for(;;) {
+ r = sd_journal_next(j);
+ if (r < 0)
+ return log_error_errno(r, "Failed to read next journal entry: %m");
+ if (r > 0)
+ break;
+
+ if (!arg_continuous) {
+ log_debug("No emergency level entries in the journal");
+ *ret = NULL;
+ return 0;
+ }
+
+ r = sd_journal_wait(j, (uint64_t) -1);
+ if (r < 0)
+ return log_error_errno(r, "Failed to wait for changes: %m");
+
+ continue;
}
r = sd_journal_get_data(j, "MESSAGE", &d, &l);
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
+ { "continuous", no_argument, NULL, 'c' },
{}
};
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "hc", options, NULL)) >= 0)
switch (c) {
case ARG_VERSION:
return version();
+ case 'c':
+ arg_continuous = true;
+ break;
+
case '?':
return -EINVAL;
'conditions' : ['ENABLE_INITRD'],
'symlinks' : ['initrd.target.wants/'],
},
+ {
+ 'file' : 'systemd-bsod.service.in',
+ 'conditions' : ['HAVE_QRENCODE','ENABLE_INITRD'],
+ 'symlinks' : ['initrd.target.wants/'],
+ },
{
'file' : 'initrd-cleanup.service',
'conditions' : ['ENABLE_INITRD'],
--- /dev/null
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# 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=Displays emergency message full screen.
+Documentation=man:systemd-bsod(8)
+ConditionVirtualization=no
+DefaultDependencies=no
+Conflicts=shutdown.target
+Before=shutdown.target
+After=systemd-battery-check.service
+
+[Service]
+RemainAfterExit=yes
+ExecStart={{LIBEXECDIR}}/systemd-bsod --continuous