freebsd-ports/sysutils/consolekit/files/patch-tools_ck-collect-session-info.c
Joe Marcus Clarke e573952843 Allow ConsoleKit to mark X sessions started with startx as active. This
will fix a lot of problems with delays starting GNOME applications,
permission problems mounting removable media, and problems not being able
to shutdown or reboot.

Reported by:	many
2010-07-24 02:14:15 +00:00

76 lines
2.4 KiB
C

--- tools/ck-collect-session-info.c.orig 2009-04-29 15:07:29.000000000 -0400
+++ tools/ck-collect-session-info.c 2010-07-12 23:55:13.000000000 -0400
@@ -226,6 +226,12 @@ fill_x11_info (SessionInfo *si)
gboolean res;
CkProcessStat *xorg_stat;
GError *error;
+ char *err;
+ char *out;
+ int status;
+ int i;
+ char *argv[4];
+ GPtrArray *env;
/* assume this is true then check it */
si->x11_display = ck_unix_pid_get_env (si->pid, "DISPLAY");
@@ -272,6 +278,52 @@ fill_x11_info (SessionInfo *si)
}
si->x11_display_device = ck_process_stat_get_tty (xorg_stat);
+ if (g_strcmp0 (si->x11_display_device, si->display_device) != 0) {
+ goto gotit;
+ }
+
+ g_free (si->x11_display_device);
+
+ /* get the applicable environment */
+ env = get_filtered_environment (si->pid);
+
+ argv[0] = LIBEXECDIR "/ck-get-x11-display-device";
+ argv[1] = NULL;
+
+ error = NULL;
+ out = NULL;
+ err = NULL;
+ status = -1;
+ res = g_spawn_sync (NULL,
+ argv,
+ (char **)env->pdata,
+ 0,
+ (GSpawnChildSetupFunc)setuid_child_setup_func,
+ si,
+ &out,
+ &err,
+ &status,
+ &error);
+ for (i = 0; i < env->len; i++) {
+ g_free (g_ptr_array_index (env, i));
+ }
+ g_ptr_array_free (env, TRUE);
+
+ if (error != NULL) {
+ g_warning ("Unable to get display device for x11 server: %s", error->message);
+ g_error_free (error);
+ }
+
+ if (status == 0) {
+ if (res && out != NULL) {
+ si->x11_display_device = g_strstrip (out);
+ goto gotit;
+ }
+ }
+
+ si->x11_display_device = ck_process_stat_get_tty (xorg_stat);
+
+gotit:
ck_process_stat_free (xorg_stat);
si->is_local = TRUE;
@@ -410,5 +462,5 @@ main (int argc,
ret = collect_session_info (user_id, process_id);
- return ret != TRUE;
+ return ret != TRUE;
}