mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-03-31 11:10:46 +02:00
core: listen to UPower for suspend/resume signals
This means you don't need pm-utils anymore, and that gnome-power-manager doesn't need to poke NM explicitly for suspend/resume operations. The old explicit sleep/wake request is still around for pm-utils or gpm to use, but NM will listen for UPower events and act on them regardless of what pm-utils or gpm do.
This commit is contained in:
parent
9b54cb1ec6
commit
a33843ac3d
1 changed files with 42 additions and 1 deletions
|
|
@ -61,6 +61,8 @@
|
|||
#define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
|
||||
#define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
|
||||
|
||||
#define UPOWER_DBUS_SERVICE "org.freedesktop.UPower"
|
||||
|
||||
static gboolean impl_manager_get_devices (NMManager *manager, GPtrArray **devices, GError **err);
|
||||
static void impl_manager_activate_connection (NMManager *manager,
|
||||
const char *service_name,
|
||||
|
|
@ -231,6 +233,7 @@ typedef struct {
|
|||
guint modem_removed_id;
|
||||
|
||||
DBusGProxy *aipd_proxy;
|
||||
DBusGProxy *upower_proxy;
|
||||
|
||||
PolkitAuthority *authority;
|
||||
guint auth_changed_id;
|
||||
|
|
@ -3354,6 +3357,9 @@ _internal_sleep (NMManager *self, gboolean do_sleep)
|
|||
{
|
||||
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
|
||||
|
||||
if (priv->sleeping == do_sleep)
|
||||
return;
|
||||
|
||||
nm_log_info (LOGD_SUSPEND, "%s requested (sleeping: %s enabled: %s)",
|
||||
do_sleep ? "sleep" : "wake",
|
||||
priv->sleeping ? "yes" : "no",
|
||||
|
|
@ -3382,7 +3388,7 @@ sleep_auth_done_cb (NMAuthChain *chain,
|
|||
|
||||
result = GPOINTER_TO_UINT (nm_auth_chain_get_data (chain, NM_AUTH_PERMISSION_SLEEP_WAKE));
|
||||
if (error) {
|
||||
nm_log_dbg (LOGD_CORE, "Sleep/wake request failed: %s", error->message);
|
||||
nm_log_dbg (LOGD_SUSPEND, "Sleep/wake request failed: %s", error->message);
|
||||
ret_error = g_error_new (NM_MANAGER_ERROR,
|
||||
NM_MANAGER_ERROR_PERMISSION_DENIED,
|
||||
"Sleep/wake request failed: %s",
|
||||
|
|
@ -3456,6 +3462,20 @@ impl_manager_sleep (NMManager *self,
|
|||
nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_sleeping_cb (DBusGProxy *proxy, gpointer user_data)
|
||||
{
|
||||
nm_log_dbg (LOGD_SUSPEND, "Received UPower sleeping signal");
|
||||
_internal_sleep (NM_MANAGER (user_data), TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
upower_resuming_cb (DBusGProxy *proxy, gpointer user_data)
|
||||
{
|
||||
nm_log_dbg (LOGD_SUSPEND, "Received UPower resuming signal");
|
||||
_internal_sleep (NM_MANAGER (user_data), FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
_internal_enable (NMManager *self, gboolean enable)
|
||||
{
|
||||
|
|
@ -4294,6 +4314,9 @@ dispose (GObject *object)
|
|||
if (priv->bluez_mgr)
|
||||
g_object_unref (priv->bluez_mgr);
|
||||
|
||||
if (priv->upower_proxy)
|
||||
g_object_unref (priv->upower_proxy);
|
||||
|
||||
if (priv->fw_monitor) {
|
||||
if (priv->fw_monitor_id)
|
||||
g_signal_handler_disconnect (priv->fw_monitor, priv->fw_monitor_id);
|
||||
|
|
@ -4468,6 +4491,24 @@ nm_manager_init (NMManager *manager)
|
|||
} else
|
||||
nm_log_warn (LOGD_AUTOIP4, "could not initialize avahi-autoipd D-Bus proxy");
|
||||
|
||||
/* upower sleep/wake handling */
|
||||
priv->upower_proxy = dbus_g_proxy_new_for_name (g_connection,
|
||||
UPOWER_DBUS_SERVICE,
|
||||
"/org/freedesktop/UPower",
|
||||
"org.freedesktop.UPower");
|
||||
if (priv->upower_proxy) {
|
||||
dbus_g_proxy_add_signal (priv->upower_proxy, "Sleeping", G_TYPE_INVALID);
|
||||
dbus_g_proxy_connect_signal (priv->upower_proxy, "Sleeping",
|
||||
G_CALLBACK (upower_sleeping_cb),
|
||||
manager, NULL);
|
||||
|
||||
dbus_g_proxy_add_signal (priv->upower_proxy, "Resuming", G_TYPE_INVALID);
|
||||
dbus_g_proxy_connect_signal (priv->upower_proxy, "Resuming",
|
||||
G_CALLBACK (upower_resuming_cb),
|
||||
manager, NULL);
|
||||
} else
|
||||
nm_log_warn (LOGD_SUSPEND, "could not initialize UPower D-Bus proxy");
|
||||
|
||||
priv->authority = polkit_authority_get_sync (NULL, &error);
|
||||
if (priv->authority) {
|
||||
priv->auth_changed_id = g_signal_connect (priv->authority,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue