Author: pierre Date: Tue Apr 19 13:08:35 2016 New Revision: 3382 Log: Lxsession patch for using ConsoleKit2 API for Hibernate and Suspend
Added: trunk/lxsession/lxsession-0.5.2-hibernate_consolekit-2.patch Added: trunk/lxsession/lxsession-0.5.2-hibernate_consolekit-2.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/lxsession/lxsession-0.5.2-hibernate_consolekit-2.patch Tue Apr 19 13:08:35 2016 (r3382) @@ -0,0 +1,248 @@ +Submitted By: Pierre Labastie <pierre dot labastie at neuf dot fr> +Date: 2016-04-19 +Initial Package Version: 0.5.2 +Upstream Status: Pushed to git +Origin: Self +Description: Adds Hibernate and Suspend through ConsoleKit2 API + +diff -Naur lxsession-0.5.2-old/lxlock/lxlock lxsession-0.5.2-new/lxlock/lxlock +--- lxsession-0.5.2-old/lxlock/lxlock 2014-11-29 15:43:14.000000000 +0100 ++++ lxsession-0.5.2-new/lxlock/lxlock 2016-04-09 19:11:24.317005824 +0200 +@@ -29,11 +29,11 @@ + xscreensaver-command -lock >/dev/null 2>&1 + elif pidof gnome-screensaver >/dev/null; then + gnome-screensaver-command --lock +-elif which slock >/dev/null; then ++elif which slock >/dev/null 2>&1; then + slock & +-elif which xlock 2>/dev/null; then ++elif which xlock >/dev/null 2>&1; then + xlock $* +-elif which i3lock >/dev/null; then ++elif which i3lock >/dev/null 2>&1; then + i3lock -d + else + # In the end, try to fallback to xscreensaver +diff -Naur lxsession-0.5.2-old/lxsession-logout/lxsession-logout.c lxsession-0.5.2-new/lxsession-logout/lxsession-logout.c +--- lxsession-0.5.2-old/lxsession-logout/lxsession-logout.c 2014-11-29 15:43:14.000000000 +0100 ++++ lxsession-0.5.2-new/lxsession-logout/lxsession-logout.c 2016-04-09 21:02:25.035056912 +0200 +@@ -69,6 +69,8 @@ + int hibernate_systemd : 1; /* Hibernate is available via systemd */ + int shutdown_ConsoleKit : 1; /* Shutdown is available via ConsoleKit */ + int reboot_ConsoleKit : 1; /* Reboot is available via ConsoleKit */ ++ int suspend_ConsoleKit : 1; /* Suspend is available via ConsoleKit */ ++ int hibernate_ConsoleKit : 1; /* Hibernate is available via ConsoleKit */ + int suspend_UPower : 1; /* Suspend is available via UPower */ + int hibernate_UPower : 1; /* Hibernate is available via UPower */ + int switch_user_GDM : 1; /* Switch User is available via GDM */ +@@ -222,7 +224,7 @@ + } + } + else if (handler_context->shutdown_ConsoleKit) +- dbus_ConsoleKit_Stop(&err); ++ dbus_ConsoleKit_PowerOff(&err); + else if (handler_context->shutdown_systemd) + dbus_systemd_PowerOff(&err); + +@@ -252,7 +254,7 @@ + } + } + else if (handler_context->reboot_ConsoleKit) +- dbus_ConsoleKit_Restart(&err); ++ dbus_ConsoleKit_Reboot(&err); + else if (handler_context->reboot_systemd) + dbus_systemd_Reboot(&err); + +@@ -276,6 +278,8 @@ + lock_screen(); + if (handler_context->suspend_UPower) + dbus_UPower_Suspend(&err); ++ else if (handler_context->suspend_ConsoleKit) ++ dbus_ConsoleKit_Suspend(&err); + else if (handler_context->suspend_systemd) + dbus_systemd_Suspend(&err); + +@@ -299,6 +303,8 @@ + lock_screen(); + if (handler_context->hibernate_UPower) + dbus_UPower_Hibernate(&err); ++ else if (handler_context->hibernate_ConsoleKit) ++ dbus_ConsoleKit_Hibernate(&err); + else if (handler_context->hibernate_systemd) + dbus_systemd_Hibernate(&err); + +@@ -515,16 +521,26 @@ + } + + /* Initialize capabilities of the ConsoleKit mechanism. */ +- if (!handler_context.shutdown_available && dbus_ConsoleKit_CanStop()) ++ if (!handler_context.shutdown_available && dbus_ConsoleKit_CanPowerOff()) + { + handler_context.shutdown_available = TRUE; + handler_context.shutdown_ConsoleKit = TRUE; + } +- if (!handler_context.reboot_available && dbus_ConsoleKit_CanRestart()) ++ if (!handler_context.reboot_available && dbus_ConsoleKit_CanReboot()) + { + handler_context.reboot_available = TRUE; + handler_context.reboot_ConsoleKit = TRUE; + } ++ if (!handler_context.suspend_available && dbus_ConsoleKit_CanSuspend()) ++ { ++ handler_context.suspend_available = TRUE; ++ handler_context.suspend_ConsoleKit = TRUE; ++ } ++ if (!handler_context.hibernate_available && dbus_ConsoleKit_CanHibernate()) ++ { ++ handler_context.hibernate_available = TRUE; ++ handler_context.hibernate_ConsoleKit = TRUE; ++ } + + /* Initialize capabilities of the UPower mechanism. */ + if (!handler_context.suspend_available && dbus_UPower_CanSuspend()) +diff -Naur lxsession-0.5.2-old/lxsession-logout/lxsession-logout-dbus-interface.c lxsession-0.5.2-new/lxsession-logout/lxsession-logout-dbus-interface.c +--- lxsession-0.5.2-old/lxsession-logout/lxsession-logout-dbus-interface.c 2014-11-29 15:43:14.000000000 +0100 ++++ lxsession-0.5.2-new/lxsession-logout/lxsession-logout-dbus-interface.c 2016-04-09 19:25:46.704012439 +0200 +@@ -93,10 +93,11 @@ + /*** ConsoleKit mechanism ***/ + + static gboolean +-ck_call_function (const gchar *function, gboolean default_result, GError **error) ++ck_query (const gchar *function, gboolean default_result, GError **error) + { + GVariant *result; + gboolean function_result = FALSE; ++ const gchar *str; + + if (!ck_proxy) + { +@@ -122,35 +123,95 @@ + if (!result) + return default_result; + +- if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)"))) +- g_variant_get (result, "(b)", &function_result); ++ if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(s)"))) ++ { ++ g_variant_get (result, "(s)", &str); ++ if ( g_strcmp0 (str, "yes") == 0 || g_strcmp0 (str, "challenge") == 0 ) ++ function_result = TRUE; ++ else ++ function_result = default_result; ++ } + + g_variant_unref (result); + return function_result; + } + ++static void ++ck_call_function (const gchar *function, gboolean value, GError **error) ++{ ++ GVariant *result; ++ ++ if (!ck_proxy) ++ { ++ ck_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, ++ G_DBUS_PROXY_FLAGS_NONE, ++ NULL, ++ "org.freedesktop.ConsoleKit", ++ "/org/freedesktop/ConsoleKit", ++ "org.freedesktop.ConsoleKit.Manager", ++ NULL, ++ error); ++ if (!ck_proxy) ++ return; ++ } ++ ++ result = g_dbus_proxy_call_sync (ck_proxy, ++ function, ++ g_variant_new ("(b)", value), ++ G_DBUS_CALL_FLAGS_NONE, ++ -1, ++ NULL, ++ error); ++ g_variant_unref (result); ++ return; ++} ++ + gboolean +-dbus_ConsoleKit_CanRestart (void) ++dbus_ConsoleKit_CanPowerOff (void) ++{ ++ return ck_query ("CanPowerOff", FALSE, NULL); ++} ++ ++void ++dbus_ConsoleKit_PowerOff (GError **error) + { +- return ck_call_function ("CanRestart", FALSE, NULL); ++ ck_call_function ("PowerOff", TRUE, error); + } + + gboolean +-dbus_ConsoleKit_Restart (GError **error) ++dbus_ConsoleKit_CanReboot (void) + { +- return ck_call_function ("Restart", TRUE, error); ++ return ck_query ("CanReboot", FALSE, NULL); ++} ++ ++void ++dbus_ConsoleKit_Reboot (GError **error) ++{ ++ ck_call_function ("Reboot", TRUE, error); + } + + gboolean +-dbus_ConsoleKit_CanStop (void) ++dbus_ConsoleKit_CanSuspend (void) + { +- return ck_call_function ("CanStop", FALSE, NULL); ++ return ck_query ("CanSuspend", FALSE, NULL); ++} ++ ++void ++dbus_ConsoleKit_Suspend (GError **error) ++{ ++ ck_call_function ("Suspend", TRUE, error); + } + + gboolean +-dbus_ConsoleKit_Stop (GError **error) ++dbus_ConsoleKit_CanHibernate (void) ++{ ++ return ck_query ("CanHibernate", FALSE, NULL); ++} ++ ++void ++dbus_ConsoleKit_Hibernate (GError **error) + { +- return ck_call_function ("Stop", TRUE, error); ++ ck_call_function ("Hibernate", TRUE, error); + } + + /*** Systemd mechanism ***/ +diff -Naur lxsession-0.5.2-old/lxsession-logout/lxsession-logout-dbus-interface.h lxsession-0.5.2-new/lxsession-logout/lxsession-logout-dbus-interface.h +--- lxsession-0.5.2-old/lxsession-logout/lxsession-logout-dbus-interface.h 2014-10-05 01:49:49.000000000 +0200 ++++ lxsession-0.5.2-new/lxsession-logout/lxsession-logout-dbus-interface.h 2016-04-09 21:05:04.524058135 +0200 +@@ -21,11 +21,15 @@ + + #include <glib.h> + +-/* Interface to ConsoleKit for shutdown and reboot. */ +-extern gboolean dbus_ConsoleKit_CanStop(void); +-extern gboolean dbus_ConsoleKit_CanRestart(void); +-extern gboolean dbus_ConsoleKit_Stop(GError **); +-extern gboolean dbus_ConsoleKit_Restart(GError **); ++/* Interface to ConsoleKit for suspend, hibernate, shutdown and reboot. */ ++extern gboolean dbus_ConsoleKit_CanPowerOff(void); ++extern gboolean dbus_ConsoleKit_CanReboot(void); ++extern gboolean dbus_ConsoleKit_CanSuspend(void); ++extern gboolean dbus_ConsoleKit_CanHibernate(void); ++extern void dbus_ConsoleKit_PowerOff(GError **); ++extern void dbus_ConsoleKit_Reboot(GError **); ++extern void dbus_ConsoleKit_Suspend(GError **); ++extern void dbus_ConsoleKit_Hibernate(GError **); + + /* Interface to UPower for suspend and hibernate. */ + extern gboolean dbus_UPower_CanSuspend(void); -- http://lists.linuxfromscratch.org/listinfo/patches FAQ: http://www.linuxfromscratch.org/blfs/faq.html Unsubscribe: See the above information page