[systemd-commits] src/systemctl
Lennart Poettering
lennart at kemper.freedesktop.org
Wed Apr 8 09:23:10 PDT 2015
src/systemctl/systemctl.c | 48 +++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 43 insertions(+), 5 deletions(-)
New commits:
commit a4921cf4e2acde70eeaa0da8f040da6a058206b4
Author: Jan Janssen <medhefgo at web.de>
Date: Wed Apr 8 16:49:25 2015 +0200
systemctl: Use logind for --firmware-setup if possible
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index ae87e44..9cb351d 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -2913,6 +2913,46 @@ static int check_inhibitors(sd_bus *bus, enum action a) {
#endif
}
+static int prepare_firmware_setup(sd_bus *bus) {
+#ifdef HAVE_LOGIND
+ _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+#endif
+ int r;
+
+ if (!arg_firmware_setup)
+ return 0;
+
+ if (arg_transport == BUS_TRANSPORT_LOCAL) {
+
+ r = efi_set_reboot_to_firmware(true);
+ if (r < 0)
+ log_debug_errno(r, "Cannot indicate to EFI to boot into setup mode, will retry via logind: %m");
+ else
+ return r;
+ }
+
+#ifdef HAVE_LOGIND
+ r = sd_bus_call_method(
+ bus,
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "SetRebootToFirmwareSetup",
+ &error,
+ NULL,
+ "b", true);
+ if (r < 0) {
+ log_error("Cannot indicate to EFI to boot into setup mode: %s", bus_error_message(&error, r));
+ return r;
+ }
+
+ return 0;
+#else
+ log_error("Cannot remotely indicate to EFI to boot into setup mode.");
+ return -EINVAL;
+#endif
+}
+
static int start_special(sd_bus *bus, char **args) {
enum action a;
int r;
@@ -2930,11 +2970,9 @@ static int start_special(sd_bus *bus, char **args) {
return -EPERM;
}
- if (arg_firmware_setup) {
- r = efi_set_reboot_to_firmware(true);
- if (r < 0)
- return log_error_errno(r, "Cannot indicate to EFI to boot into setup mode: %m");
- }
+ r = prepare_firmware_setup(bus);
+ if (r < 0)
+ return r;
if (a == ACTION_REBOOT && args[1]) {
r = update_reboot_param_file(args[1]);
More information about the systemd-commits
mailing list