summaryrefslogtreecommitdiff
path: root/src/gs-listener-dbus.c
diff options
context:
space:
mode:
authorFaidon Liambotis <[email protected]>2015-09-15 01:31:07 +0300
committerMonsta <[email protected]>2015-10-14 11:08:27 +0300
commitf1739c03e00a51e87bd49d04827e5b765d1c70de (patch)
tree025ae4520213de91a40c9c553cbbbf5af0503c49 /src/gs-listener-dbus.c
parent306599bdbae51788ed2c2faa061adc6966fd814d (diff)
downloadmate-screensaver-f1739c03e00a51e87bd49d04827e5b765d1c70de.tar.bz2
mate-screensaver-f1739c03e00a51e87bd49d04827e5b765d1c70de.tar.xz
Lock the screen on systemd sleep under systemd
Add a handler for the PrepareForSleep event on the system bus under systemd and lock the screen in such an event. This addresses the issue where "systemctl suspend" suspends the system but the system isn't locked on resume, with the obvious negative security connotations.
Diffstat (limited to 'src/gs-listener-dbus.c')
-rw-r--r--src/gs-listener-dbus.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gs-listener-dbus.c b/src/gs-listener-dbus.c
index 3a73612..96b3f6a 100644
--- a/src/gs-listener-dbus.c
+++ b/src/gs-listener-dbus.c
@@ -1655,6 +1655,17 @@ listener_dbus_handle_system_message (DBusConnection *connection,
}
return DBUS_HANDLER_RESULT_HANDLED;
+ } else if (dbus_message_is_signal (message, SYSTEMD_LOGIND_INTERFACE, "PrepareForSleep")) {
+ gboolean active;
+ if (dbus_message_get_args (message, NULL,
+ DBUS_TYPE_BOOLEAN, &active,
+ DBUS_TYPE_INVALID) && active) {
+ gs_debug ("systemd notified that system is about to sleep");
+ g_signal_emit (listener, signals [LOCK], 0);
+ } else {
+ gs_debug ("cannot parse PrepareForSleep");
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
} else if (dbus_message_is_signal (message, DBUS_INTERFACE_PROPERTIES, "PropertiesChanged")) {
if (_listener_message_path_is_our_session (listener, message)) {
@@ -2273,6 +2284,12 @@ gs_listener_acquire (GSListener *listener,
dbus_bus_add_match (listener->priv->system_connection,
"type='signal'"
",sender='"SYSTEMD_LOGIND_SERVICE"'"
+ ",interface='"SYSTEMD_LOGIND_INTERFACE"'"
+ ",member='PrepareForSleep'",
+ NULL);
+ dbus_bus_add_match (listener->priv->system_connection,
+ "type='signal'"
+ ",sender='"SYSTEMD_LOGIND_SERVICE"'"
",interface='"DBUS_INTERFACE_PROPERTIES"'"
",member='PropertiesChanged'",
NULL);