diff options
author | Faidon Liambotis <[email protected]> | 2015-09-15 01:31:07 +0300 |
---|---|---|
committer | Monsta <[email protected]> | 2015-10-14 11:08:27 +0300 |
commit | f1739c03e00a51e87bd49d04827e5b765d1c70de (patch) | |
tree | 025ae4520213de91a40c9c553cbbbf5af0503c49 | |
parent | 306599bdbae51788ed2c2faa061adc6966fd814d (diff) | |
download | mate-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.
-rw-r--r-- | src/gs-listener-dbus.c | 17 |
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); |