logind: add PreparingForShutdownWithMetadata property

The PrepareForShutdownWithMetadata signal was added via
e4aab5cf1a but a corresponding property
was not. A property has to be a single type, so the bool needs to be
one of the key/value pairs as 'ba{sv}' is not a valid property.
This commit is contained in:
Luca Boccassi
2024-08-05 19:30:15 +02:00
committed by Luca Boccassi
parent bec6b53f3c
commit 1e0ef01439
3 changed files with 48 additions and 3 deletions
+14 -3
View File
@@ -256,6 +256,8 @@ node /org/freedesktop/login1 {
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b PreparingForShutdown = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly a{sv} PreparingForShutdownWithMetadata = [...];
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
readonly b PreparingForSleep = ...;
readonly (st) ScheduledShutdown = ...;
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
@@ -526,6 +528,8 @@ node /org/freedesktop/login1 {
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForShutdown"/>
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForShutdownWithMetadata"/>
<variablelist class="dbus-property" generated="True" extra-ref="PreparingForSleep"/>
<variablelist class="dbus-property" generated="True" extra-ref="ScheduledShutdown"/>
@@ -815,8 +819,14 @@ node /org/freedesktop/login1 {
<para>The <varname>PreparingForShutdown</varname> and <varname>PreparingForSleep</varname> boolean
properties are true during the interval between the two <function>PrepareForShutdown()</function> and
<function>PrepareForSleep()</function> signals respectively. Note that these properties do not
send out <function>PropertyChanged</function> signals.</para>
<function>PrepareForSleep()</function> signals respectively. The
<varname>PreparingForShutdownWithMetadata</varname> property provides a list of key/value pair
metadata fields. Currently it lists a <varname>preparing</varname> boolean that corresponds to the
<varname>PreparingForShutdown</varname> property, and, if a shutdown is being prepared, it will also
contain a <varname>type</varname> string which defines the type of shutdown. The type can be one of
<literal>power-off</literal>, <literal>reboot</literal>, <literal>halt</literal>,
<literal>kexec</literal> or <literal>soft-reboot</literal>. Note that these properties do not send out
<function>PropertyChanged</function> signals.</para>
<para>The <varname>RebootParameter</varname> property shows the value set with the
<function>SetRebootParameter()</function> method described above.</para>
@@ -1609,7 +1619,8 @@ node /org/freedesktop/login1/session/1 {
<varname>SleepOperation</varname>,
<varname>DesignatedMaintenanceTime</varname>, and
<function>ListSessionsEx()</function> were added in version 256.</para>
<para><varname>HandleSecureAttentionKey</varname>, and
<para><varname>HandleSecureAttentionKey</varname>,
<varname>PreparingForShutdownWithMetadata</varname>, and
<function>SecureAttentionKey()</function> were added in version 257.</para>
</refsect2>
<refsect2>
+30
View File
@@ -341,6 +341,35 @@ static int property_get_preparing(
return sd_bus_message_append(reply, "b", b);
}
static int property_get_preparing_shutdown_with_metadata(
sd_bus *bus,
const char *path,
const char *interface,
const char *property,
sd_bus_message *reply,
void *userdata,
sd_bus_error *error) {
Manager *m = ASSERT_PTR(userdata);
assert(bus);
assert(reply);
if (!m->delayed_action || !(m->delayed_action->inhibit_what & INHIBIT_SHUTDOWN))
return sd_bus_message_append(reply, "a{sv}", 1, "preparing", "b", false);
return sd_bus_message_append(
reply,
"a{sv}",
2,
"preparing",
"b",
true,
"type",
"s",
handle_action_to_string(m->delayed_action->handle));
}
static int property_get_sleep_operations(
sd_bus *bus,
const char *path,
@@ -3718,6 +3747,7 @@ static const sd_bus_vtable manager_vtable[] = {
SD_BUS_PROPERTY("IdleAction", "s", property_get_handle_action, offsetof(Manager, idle_action), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("IdleActionUSec", "t", NULL, offsetof(Manager, idle_action_usec), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PreparingForShutdown", "b", property_get_preparing, 0, 0),
SD_BUS_PROPERTY("PreparingForShutdownWithMetadata", "a{sv}", property_get_preparing_shutdown_with_metadata, 0, 0),
SD_BUS_PROPERTY("PreparingForSleep", "b", property_get_preparing, 0, 0),
SD_BUS_PROPERTY("ScheduledShutdown", "(st)", property_get_scheduled_shutdown, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("DesignatedMaintenanceTime", "s", property_get_maintenance_time, 0, 0),
+4
View File
@@ -273,6 +273,10 @@ EOF
touch /run/TEST-82-SOFTREBOOT.touch
systemctl --no-block --check-inhibitors=yes soft-reboot
# Ensure the property works too
type="$(busctl --json=short get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager PreparingForShutdownWithMetadata | jq -r '.data.type.data')"
test "$type" = "soft-reboot"
# Now block until the soft-boot killing spree kills us
exec sleep infinity
fi