[systemd-devel] [PATCH] systemctl: Use logind for --firmware-setup if possible

Lennart Poettering lennart at poettering.net
Wed Apr 8 09:24:08 PDT 2015


On Wed, 08.04.15 16:49, Jan Janssen (medhefgo at web.de) wrote:

Awesome! Thanks!

Applied! (Though I took the liberty to swap the order around, to first
try direct access, and only the fall back via logind.

Thanks,

Lennart

> ---
>  src/systemctl/systemctl.c | 43 ++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 38 insertions(+), 5 deletions(-)
> 
> diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
> index ae87e44..caa8d07 100644
> --- a/src/systemctl/systemctl.c
> +++ b/src/systemctl/systemctl.c
> @@ -2913,6 +2913,41 @@ static int check_inhibitors(sd_bus *bus, enum action a) {
>  #endif
>  }
>  
> +static int prepare_firmware_setup(sd_bus *bus) {
> +        int r;
> +        _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
> +
> +        if (!arg_firmware_setup)
> +                return 0;
> +
> +#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));
> +
> +        /* No point trying to fall back. */
> +        if (r == -EOPNOTSUPP)
> +                return r;
> +#endif
> +
> +        if (arg_transport != BUS_TRANSPORT_LOCAL)
> +                return log_error_errno(-EINVAL, "Cannot remotely indicate to EFI to boot into setup mode.");
> +
> +        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");
> +
> +        return 0;
> +}
> +
>  static int start_special(sd_bus *bus, char **args) {
>          enum action a;
>          int r;
> @@ -2930,11 +2965,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]);
> -- 
> 2.3.5
> 
> _______________________________________________
> systemd-devel mailing list
> systemd-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/systemd-devel


Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list