From 72bd1dd05ea098213b9b4a98017b024b9907db1fb6aaffe4b10a7883f68a2583 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Thu, 18 Nov 2010 17:34:51 +0000 Subject: [PATCH 1/2] Updating link to change in openSUSE:Factory/lxsession revision 14.0 OBS-URL: https://build.opensuse.org/package/show/X11:lxde/lxsession?expand=0&rev=b92385103739131759f662c2c9380d91 --- lxsession.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxsession.spec b/lxsession.spec index e32dd87..54a8503 100644 --- a/lxsession.spec +++ b/lxsession.spec @@ -20,7 +20,7 @@ Name: lxsession Version: 0.4.5 -Release: 7 +Release: 1 Summary: LXDE Session Manager, required for running the desktop environment Group: System/GUI/LXDE License: GPL From f032aef3f7744f31f37aaaf9870ddf963a03836d45762ca1f6b7cf62c80f880a Mon Sep 17 00:00:00 2001 From: Guido Berhoerster Date: Sat, 4 Dec 2010 19:07:37 +0000 Subject: [PATCH 2/2] - take a different approach to locking the screen, execute a lxlock script asynchronously, this solves the problem with xlock and slock which do not fork and blocked suspend/hibernate OBS-URL: https://build.opensuse.org/package/show/X11:lxde/lxsession?expand=0&rev=45 --- lxsession-0.4.5-lock-screen-bnc622083.patch | 116 +++++++++++++------- lxsession.changes | 7 ++ lxsession.spec | 4 +- 3 files changed, 85 insertions(+), 42 deletions(-) diff --git a/lxsession-0.4.5-lock-screen-bnc622083.patch b/lxsession-0.4.5-lock-screen-bnc622083.patch index cc17ac9..ee7a1a3 100644 --- a/lxsession-0.4.5-lock-screen-bnc622083.patch +++ b/lxsession-0.4.5-lock-screen-bnc622083.patch @@ -1,6 +1,70 @@ -diff -ur lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c lxsession-0.4.5/lxsession-logout/lxsession-logout.c ---- lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c 2010-11-14 19:28:18.000000000 +0100 -+++ lxsession-0.4.5/lxsession-logout/lxsession-logout.c 2010-11-16 18:59:38.000000000 +0100 +diff --git a/Makefile.am b/Makefile.am +index 6e86875..5e53b41 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -11,7 +11,11 @@ image_DATA= \ + images/gnome-session-suspend.png \ + images/gnome-session-switch.png + ++scripts= lxlock ++bin_SCRIPTS= $(scripts) ++ + EXTRA_DIST = \ + desktop.conf.example \ +- $(image_DATA) ++ $(scripts) \ ++ $(image_DATA) \ + $(NULL) +diff --git a/lxlock b/lxlock +new file mode 100644 +index 0000000..447aa9a +--- /dev/null ++++ b/lxlock +@@ -0,0 +1,40 @@ ++#!/bin/sh ++# ++# lxlock - try to lock the screen ++# ++# Copyright (c) 2010 Guido Berhoerster ++# ++# Permission to use, copy, modify, and distribute this software for any ++# purpose with or without fee is hereby granted, provided that the above ++# copyright notice and this permission notice appear in all copies. ++# ++# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++# TORTIOUS ACTION, ARISING OUT OF ++# PERFORMANCE OF THIS SOFTWARE. ++ ++PATH=/bin:/usr/bin ++export PATH ++ ++for lock_cmd in \ ++ "xscreensaver-command -lock" \ ++ "gnome-screensaver-command --lock" ++do ++ $lock_cmd >/dev/null 2>&1 && exit ++done ++ ++for lock_cmd in \ ++ "slock" \ ++ "xlock -mode blank" ++do ++ set -- $lock_cmd ++ if command -v -- $1 >/dev/null 2>&1; then ++ $lock_cmd >/dev/null 2>&1 & ++ exit ++ fi ++done ++ ++exit 1 +diff --git a/lxsession-logout/lxsession-logout.c b/lxsession-logout/lxsession-logout.c +index 435216c..6c6f89c 100644 +--- a/lxsession-logout/lxsession-logout.c ++++ b/lxsession-logout/lxsession-logout.c @@ -25,6 +25,7 @@ #include #include @@ -9,7 +73,7 @@ diff -ur lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c lxsession-0.4. #include #include #include -@@ -73,6 +74,7 @@ +@@ -73,6 +74,7 @@ typedef struct { int ltsp : 1; /* Shutdown and reboot is accomplished via LTSP */ } HandlerContext; @@ -17,54 +81,26 @@ diff -ur lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c lxsession-0.4. static gboolean verify_running(char * display_manager, char * executable); static void logout_clicked(GtkButton * button, HandlerContext * handler_context); static void change_root_property(GtkWidget* w, const char* prop_name, const char* value); -@@ -85,6 +87,46 @@ +@@ -85,6 +87,18 @@ static void cancel_clicked(GtkButton * button, gpointer user_data); static GtkPositionType get_banner_position(void); static GdkPixbuf * get_background_pixbuf(void); -+/* Try to lock the screen, return TRUE on success, FALSE if no suitable -+ * screensaver was found or the screensaver command exited abnormally. ++/* Try to run lxlock command in order to lock the screen, return TRUE on ++ * success, FALSE if command execution failed + */ +static gboolean lock_screen(void) +{ -+ gint i; -+ gint argcp; -+ gchar **argvp; -+ gint exit_status; -+ gchar *locking_commands[] = { -+ "xscreensaver-command -lock", -+ "gnome-screensaver-command --lock", -+ "xlock -mode blank", -+ NULL -+ }; -+ -+ for (i = 0; locking_commands[i] != NULL; ++i) ++ if (!g_spawn_command_line_async("lxlock", NULL)) + { -+ g_shell_parse_argv(locking_commands[i], &argcp, &argvp, NULL); -+ g_spawn_sync(NULL, -+ argvp, -+ NULL, -+ G_SPAWN_SEARCH_PATH|G_SPAWN_STDOUT_TO_DEV_NULL|G_SPAWN_STDERR_TO_DEV_NULL, -+ NULL, -+ NULL, -+ NULL, -+ NULL, -+ &exit_status, -+ NULL); -+ g_strfreev (argvp); -+ -+ if (WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == 0) -+ { -+ return TRUE; -+ } ++ return TRUE; + } -+ + return FALSE; +} + /* Verify that a program is running and that an executable is available. */ static gboolean verify_running(char * display_manager, char * executable) { -@@ -205,6 +247,7 @@ +@@ -205,6 +219,7 @@ static void suspend_clicked(GtkButton * button, HandlerContext * handler_context char * error_result = NULL; gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL); @@ -72,7 +108,7 @@ diff -ur lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c lxsession-0.4. if (handler_context->suspend_UPower) error_result = dbus_UPower_Suspend(); else if (handler_context->suspend_HAL) -@@ -221,6 +264,7 @@ +@@ -221,6 +236,7 @@ static void hibernate_clicked(GtkButton * button, HandlerContext * handler_conte char * error_result = NULL; gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL); @@ -80,7 +116,7 @@ diff -ur lxsession-0.4.5.orig/lxsession-logout/lxsession-logout.c lxsession-0.4. if (handler_context->hibernate_UPower) error_result = dbus_UPower_Hibernate(); else if (handler_context->hibernate_HAL) -@@ -236,6 +280,7 @@ +@@ -236,6 +252,7 @@ static void switch_user_clicked(GtkButton * button, HandlerContext * handler_con { gtk_label_set_text(GTK_LABEL(handler_context->error_label), NULL); diff --git a/lxsession.changes b/lxsession.changes index bbcd0e1..623585e 100644 --- a/lxsession.changes +++ b/lxsession.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Sat Dec 4 19:02:38 UTC 2010 - gber@opensuse.org + +- take a different approach to locking the screen, execute a lxlock + script asynchronously, this solves the problem with xlock and + slock which do not fork and blocked suspend/hibernate + ------------------------------------------------------------------- Tue Nov 16 18:01:20 UTC 2010 - gber@opensuse.org diff --git a/lxsession.spec b/lxsession.spec index 54a8503..088449c 100644 --- a/lxsession.spec +++ b/lxsession.spec @@ -48,8 +48,7 @@ Authors: %patch0 -p1 %build -export CFLAGS="$RPM_OPT_FLAGS" -export CXXFLAGS="$RPM_OPT_FLAGS" +autoreconf -fi %configure --enable-man %__make %{?jobs:-j%jobs} @@ -65,6 +64,7 @@ rm -rf $RPM_BUILD_ROOT %files -f %{name}.lang %defattr(-,root,root,0755) %doc ChangeLog README COPYING +%{_bindir}/lxlock %{_bindir}/lxsession %{_bindir}/lxsession-logout %dir %{_datadir}/lxsession