mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
logind: add CanIdle + CanLock dbus properties to session object
Clients should be able to know if the idle logic is available on a session without secondary knowledge about the session class. Let's hence expose a property for that. Similar for the screen lock concept. Fixes: #34844
This commit is contained in:
@@ -1245,6 +1245,10 @@ node /org/freedesktop/login1/session/1 {
|
||||
readonly b IdleHint = ...;
|
||||
readonly t IdleSinceHint = ...;
|
||||
readonly t IdleSinceHintMonotonic = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly b CanIdle = ...;
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly b CanLock = ...;
|
||||
readonly b LockedHint = ...;
|
||||
};
|
||||
interface org.freedesktop.DBus.Peer { ... };
|
||||
@@ -1349,6 +1353,10 @@ node /org/freedesktop/login1/session/1 {
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="IdleSinceHintMonotonic"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="CanIdle"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="CanLock"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="LockedHint"/>
|
||||
|
||||
<!--End of Autogenerated section-->
|
||||
@@ -1538,6 +1546,10 @@ node /org/freedesktop/login1/session/1 {
|
||||
|
||||
<para><varname>LockedHint</varname> shows the locked hint state of this session, as set by the
|
||||
<function>SetLockedHint()</function> method described above.</para>
|
||||
|
||||
<para><varname>CanIdle</varname> indicates whether the session supports the idle hint
|
||||
concept. Similarly, <varname>CanLock</varname> indicates whether the session supports the screen lock
|
||||
concept.</para>
|
||||
</refsect2>
|
||||
</refsect1>
|
||||
|
||||
@@ -1619,10 +1631,9 @@ node /org/freedesktop/login1/session/1 {
|
||||
<function>CanSleep()</function>,
|
||||
<varname>SleepOperation</varname>, and
|
||||
<function>ListSessionsEx()</function> were added in version 256.</para>
|
||||
<para><varname>HandleSecureAttentionKey</varname>,
|
||||
<function>SecureAttentionKey()</function>,
|
||||
<varname>PreparingForShutdownWithMetadata</varname>, and
|
||||
<varname>DesignatedMaintenanceTime</varname> were added in version 257.</para>
|
||||
<para><varname>HandleSecureAttentionKey</varname>, <function>SecureAttentionKey()</function>,
|
||||
<varname>PreparingForShutdownWithMetadata</varname>, <varname>DesignatedMaintenanceTime</varname>,
|
||||
<varname>CanIdle</varname> and <varname>CanLock</varname> were added in version 257.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Session Objects</title>
|
||||
|
||||
@@ -109,6 +109,40 @@ static int property_get_idle_hint(
|
||||
return sd_bus_message_append(reply, "b", session_get_idle_hint(s, NULL) > 0);
|
||||
}
|
||||
|
||||
static int property_get_can_idle(
|
||||
sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Session *s = ASSERT_PTR(userdata);
|
||||
|
||||
assert(bus);
|
||||
assert(reply);
|
||||
|
||||
return sd_bus_message_append(reply, "b", SESSION_CLASS_CAN_IDLE(s->class));
|
||||
}
|
||||
|
||||
static int property_get_can_lock(
|
||||
sd_bus *bus,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *property,
|
||||
sd_bus_message *reply,
|
||||
void *userdata,
|
||||
sd_bus_error *error) {
|
||||
|
||||
Session *s = ASSERT_PTR(userdata);
|
||||
|
||||
assert(bus);
|
||||
assert(reply);
|
||||
|
||||
return sd_bus_message_append(reply, "b", SESSION_CLASS_CAN_LOCK(s->class));
|
||||
}
|
||||
|
||||
static int property_get_idle_since_hint(
|
||||
sd_bus *bus,
|
||||
const char *path,
|
||||
@@ -983,6 +1017,8 @@ static const sd_bus_vtable session_vtable[] = {
|
||||
SD_BUS_PROPERTY("IdleHint", "b", property_get_idle_hint, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("IdleSinceHint", "t", property_get_idle_since_hint, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("IdleSinceHintMonotonic", "t", property_get_idle_since_hint, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
SD_BUS_PROPERTY("CanIdle", "b", property_get_can_idle, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("CanLock", "b", property_get_can_lock, 0, SD_BUS_VTABLE_PROPERTY_CONST),
|
||||
SD_BUS_PROPERTY("LockedHint", "b", property_get_locked_hint, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||
|
||||
SD_BUS_METHOD("Terminate",
|
||||
|
||||
@@ -575,6 +575,8 @@ testcase_list_users_sessions_seats() {
|
||||
session=$(loginctl list-sessions --no-legend | grep -v manager | awk '$3 == "logind-test-user" { print $1 }')
|
||||
: check that we got a valid session id
|
||||
busctl get-property org.freedesktop.login1 "/org/freedesktop/login1/session/_3${session?}" org.freedesktop.login1.Session Id
|
||||
busctl get-property org.freedesktop.login1 "/org/freedesktop/login1/session/_3${session?}" org.freedesktop.login1.Session CanIdle
|
||||
busctl get-property org.freedesktop.login1 "/org/freedesktop/login1/session/_3${session?}" org.freedesktop.login1.Session CanLock
|
||||
assert_eq "$(loginctl list-sessions --no-legend | grep -v manager | awk '$3 == "logind-test-user" { print $2 }')" "$(id -ru logind-test-user)"
|
||||
seat=$(loginctl list-sessions --no-legend | grep -v manager | awk '$3 == "logind-test-user" { print $4 }')
|
||||
assert_eq "$(loginctl list-sessions --no-legend | grep -v manager | awk '$3 == "logind-test-user" { print $6 }')" user
|
||||
|
||||
Reference in New Issue
Block a user