summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-03-05 12:12:59 -0500
committerWilliam Jon McCann <mccann@jhu.edu>2007-03-05 12:12:59 -0500
commit4b245b3113480d495440e1b7d32eb4dc6d564c8c (patch)
tree7758e3659e5cfa2da5679555358f619f33ce8e2b
parent67fa39aacf65117a85533035a71ee09b184003dc (diff)
add x11-display-device attribute
In certain cases it is necessary to distinguish the display-device (tty of session leader) from the x11-display-device (tty of xorg process).
-rw-r--r--src/ck-session.c60
-rw-r--r--src/ck-session.h172
-rw-r--r--src/ck-session.xml3
-rw-r--r--tools/linux/ck-collect-session-info.c29
4 files changed, 164 insertions, 100 deletions
diff --git a/src/ck-session.c b/src/ck-session.c
index 44eaa2f..9d53072 100644
--- a/src/ck-session.c
+++ b/src/ck-session.c
@@ -51,7 +51,8 @@ struct CkSessionPrivate
char *session_type;
char *display_device;
- char *xdisplay;
+ char *x11_display_device;
+ char *x11_display;
char *host_name;
guint uid;
@@ -82,6 +83,7 @@ enum {
PROP_COOKIE,
PROP_USER,
PROP_X11_DISPLAY,
+ PROP_X11_DISPLAY_DEVICE,
PROP_DISPLAY_DEVICE,
PROP_SESSION_TYPE,
PROP_HOST_NAME,
@@ -449,13 +451,13 @@ ck_session_get_user (CkSession *session,
gboolean
ck_session_get_x11_display (CkSession *session,
- char **xdisplay,
+ char **x11_display,
GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (xdisplay != NULL) {
- *xdisplay = g_strdup (session->priv->xdisplay);
+ if (x11_display != NULL) {
+ *x11_display = g_strdup (session->priv->x11_display);
}
return TRUE;
@@ -476,6 +478,20 @@ ck_session_get_display_device (CkSession *session,
}
gboolean
+ck_session_get_x11_display_device (CkSession *session,
+ char **x11_display_device,
+ GError **error)
+{
+ g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
+
+ if (x11_display_device != NULL) {
+ *x11_display_device = g_strdup (session->priv->x11_display_device);
+ }
+
+ return TRUE;
+}
+
+gboolean
ck_session_get_host_name (CkSession *session,
char **host_name,
GError **error)
@@ -598,13 +614,13 @@ ck_session_set_user (CkSession *session,
gboolean
ck_session_set_x11_display (CkSession *session,
- const char *xdisplay,
+ const char *x11_display,
GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- g_free (session->priv->xdisplay);
- session->priv->xdisplay = g_strdup (xdisplay);
+ g_free (session->priv->x11_display);
+ session->priv->x11_display = g_strdup (x11_display);
return TRUE;
}
@@ -623,6 +639,19 @@ ck_session_set_display_device (CkSession *session,
}
gboolean
+ck_session_set_x11_display_device (CkSession *session,
+ const char *x11_display_device,
+ GError **error)
+{
+ g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
+
+ g_free (session->priv->x11_display_device);
+ session->priv->x11_display_device = g_strdup (x11_display_device);
+
+ return TRUE;
+}
+
+gboolean
ck_session_set_host_name (CkSession *session,
const char *host_name,
GError **error)
@@ -677,6 +706,9 @@ ck_session_set_property (GObject *object,
case PROP_X11_DISPLAY:
ck_session_set_x11_display (self, g_value_get_string (value), NULL);
break;
+ case PROP_X11_DISPLAY_DEVICE:
+ ck_session_set_x11_display_device (self, g_value_get_string (value), NULL);
+ break;
case PROP_DISPLAY_DEVICE:
ck_session_set_display_device (self, g_value_get_string (value), NULL);
break;
@@ -722,7 +754,10 @@ ck_session_get_property (GObject *object,
g_value_set_string (value, self->priv->session_type);
break;
case PROP_X11_DISPLAY:
- g_value_set_string (value, self->priv->xdisplay);
+ g_value_set_string (value, self->priv->x11_display);
+ break;
+ case PROP_X11_DISPLAY_DEVICE:
+ g_value_set_string (value, self->priv->x11_display_device);
break;
case PROP_DISPLAY_DEVICE:
g_value_set_string (value, self->priv->display_device);
@@ -846,6 +881,13 @@ ck_session_class_init (CkSessionClass *klass)
NULL,
G_PARAM_READWRITE));
g_object_class_install_property (object_class,
+ PROP_X11_DISPLAY_DEVICE,
+ g_param_spec_string ("x11-display-device",
+ "x11-display-device",
+ "X11 Display device",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
PROP_DISPLAY_DEVICE,
g_param_spec_string ("display-device",
"display-device",
@@ -907,7 +949,7 @@ ck_session_finalize (GObject *object)
g_free (session->priv->cookie);
g_free (session->priv->seat_id);
g_free (session->priv->session_type);
- g_free (session->priv->xdisplay);
+ g_free (session->priv->x11_display);
g_free (session->priv->host_name);
G_OBJECT_CLASS (ck_session_parent_class)->finalize (object);
diff --git a/src/ck-session.h b/src/ck-session.h
index 2486371..392e219 100644
--- a/src/ck-session.h
+++ b/src/ck-session.h
@@ -66,97 +66,103 @@ typedef enum
#define CK_SESSION_ERROR ck_session_error_quark ()
-GQuark ck_session_error_quark (void);
-GType ck_session_get_type (void);
-CkSession * ck_session_new (const char *ssid,
- const char *cookie);
-CkSession * ck_session_new_with_parameters (const char *ssid,
- const char *cookie,
- const GPtrArray *parameters);
-
-gboolean ck_session_set_active (CkSession *session,
- gboolean active,
- GError **error);
-gboolean ck_session_set_is_local (CkSession *session,
- gboolean is_local,
- GError **error);
-gboolean ck_session_set_id (CkSession *session,
- const char *ssid,
- GError **error);
-gboolean ck_session_set_cookie (CkSession *session,
- const char *cookie,
- GError **error);
-gboolean ck_session_set_seat_id (CkSession *session,
- const char *sid,
- GError **error);
-gboolean ck_session_set_user (CkSession *session,
- guint uid,
- GError **error);
-gboolean ck_session_set_x11_display (CkSession *session,
- const char *xdisplay,
- GError **error);
-gboolean ck_session_set_display_device (CkSession *session,
- const char *device,
- GError **error);
-gboolean ck_session_set_host_name (CkSession *session,
- const char *host_name,
- GError **error);
-gboolean ck_session_set_session_type (CkSession *session,
- const char *type,
- GError **error);
+GQuark ck_session_error_quark (void);
+GType ck_session_get_type (void);
+CkSession * ck_session_new (const char *ssid,
+ const char *cookie);
+CkSession * ck_session_new_with_parameters (const char *ssid,
+ const char *cookie,
+ const GPtrArray *parameters);
+
+gboolean ck_session_set_active (CkSession *session,
+ gboolean active,
+ GError **error);
+gboolean ck_session_set_is_local (CkSession *session,
+ gboolean is_local,
+ GError **error);
+gboolean ck_session_set_id (CkSession *session,
+ const char *ssid,
+ GError **error);
+gboolean ck_session_set_cookie (CkSession *session,
+ const char *cookie,
+ GError **error);
+gboolean ck_session_set_seat_id (CkSession *session,
+ const char *sid,
+ GError **error);
+gboolean ck_session_set_user (CkSession *session,
+ guint uid,
+ GError **error);
+gboolean ck_session_set_x11_display (CkSession *session,
+ const char *xdisplay,
+ GError **error);
+gboolean ck_session_set_x11_display_device (CkSession *session,
+ const char *xdisplay,
+ GError **error);
+gboolean ck_session_set_display_device (CkSession *session,
+ const char *device,
+ GError **error);
+gboolean ck_session_set_host_name (CkSession *session,
+ const char *host_name,
+ GError **error);
+gboolean ck_session_set_session_type (CkSession *session,
+ const char *type,
+ GError **error);
/* Exported methods */
/* Authoritative properties */
-gboolean ck_session_get_id (CkSession *session,
- char **ssid,
- GError **error);
-gboolean ck_session_get_seat_id (CkSession *session,
- char **sid,
- GError **error);
-gboolean ck_session_is_active (CkSession *session,
- gboolean *active,
- GError **error);
-gboolean ck_session_is_local (CkSession *session,
- gboolean *local,
- GError **error);
-gboolean ck_session_get_user (CkSession *session,
- guint *uid,
- GError **error);
-gboolean ck_session_get_x11_display (CkSession *session,
- char **display,
- GError **error);
-gboolean ck_session_get_display_device (CkSession *session,
- char **display,
- GError **error);
-gboolean ck_session_get_session_type (CkSession *session,
- char **type,
- GError **error);
-gboolean ck_session_get_host_name (CkSession *session,
- char **host_name,
- GError **error);
-gboolean ck_session_get_creation_time (CkSession *session,
- char **iso8601_datetime,
- GError **error);
+gboolean ck_session_get_id (CkSession *session,
+ char **ssid,
+ GError **error);
+gboolean ck_session_get_seat_id (CkSession *session,
+ char **sid,
+ GError **error);
+gboolean ck_session_is_active (CkSession *session,
+ gboolean *active,
+ GError **error);
+gboolean ck_session_is_local (CkSession *session,
+ gboolean *local,
+ GError **error);
+gboolean ck_session_get_user (CkSession *session,
+ guint *uid,
+ GError **error);
+gboolean ck_session_get_x11_display (CkSession *session,
+ char **display,
+ GError **error);
+gboolean ck_session_get_x11_display_device (CkSession *session,
+ char **display,
+ GError **error);
+gboolean ck_session_get_display_device (CkSession *session,
+ char **display,
+ GError **error);
+gboolean ck_session_get_session_type (CkSession *session,
+ char **type,
+ GError **error);
+gboolean ck_session_get_host_name (CkSession *session,
+ char **host_name,
+ GError **error);
+gboolean ck_session_get_creation_time (CkSession *session,
+ char **iso8601_datetime,
+ GError **error);
/* Non-authoritative properties */
-gboolean ck_session_get_idle_hint (CkSession *session,
- gboolean *idle_hint,
- GError **error);
-gboolean ck_session_get_idle_since_hint (CkSession *session,
- char **iso8601_datetime,
- GError **error);
-gboolean ck_session_set_idle_hint (CkSession *session,
- gboolean idle_hint,
- DBusGMethodInvocation *context);
+gboolean ck_session_get_idle_hint (CkSession *session,
+ gboolean *idle_hint,
+ GError **error);
+gboolean ck_session_get_idle_since_hint (CkSession *session,
+ char **iso8601_datetime,
+ GError **error);
+gboolean ck_session_set_idle_hint (CkSession *session,
+ gboolean idle_hint,
+ DBusGMethodInvocation *context);
/* Privileged actions */
-gboolean ck_session_activate (CkSession *session,
- DBusGMethodInvocation *context);
-gboolean ck_session_lock (CkSession *session,
- DBusGMethodInvocation *context);
-gboolean ck_session_unlock (CkSession *session,
- DBusGMethodInvocation *context);
+gboolean ck_session_activate (CkSession *session,
+ DBusGMethodInvocation *context);
+gboolean ck_session_lock (CkSession *session,
+ DBusGMethodInvocation *context);
+gboolean ck_session_unlock (CkSession *session,
+ DBusGMethodInvocation *context);
G_END_DECLS
diff --git a/src/ck-session.xml b/src/ck-session.xml
index 71ba983..5a993cb 100644
--- a/src/ck-session.xml
+++ b/src/ck-session.xml
@@ -18,6 +18,9 @@
<method name="GetX11Display">
<arg name="display" direction="out" type="s"/>
</method>
+ <method name="GetX11DisplayDevice">
+ <arg name="x11_display_device" direction="out" type="s"/>
+ </method>
<method name="GetDisplayDevice">
<arg name="display_device" direction="out" type="s"/>
</method>
diff --git a/tools/linux/ck-collect-session-info.c b/tools/linux/ck-collect-session-info.c
index 66ecd26..cee5ccc 100644
--- a/tools/linux/ck-collect-session-info.c
+++ b/tools/linux/ck-collect-session-info.c
@@ -38,6 +38,7 @@ typedef struct {
uid_t uid;
pid_t pid;
char *display_device;
+ char *x11_display_device;
char *x11_display;
gboolean x11_can_connect;
char *hostname;
@@ -50,6 +51,7 @@ static void
session_info_free (SessionInfo *si)
{
g_free (si->display_device);
+ g_free (si->x11_display_device);
g_free (si->x11_display);
g_free (si->hostname);
g_free (si->session_type);
@@ -252,6 +254,9 @@ fill_x11_info (SessionInfo *si)
si->is_local = FALSE;
si->is_local_is_set = TRUE;
+
+ /* FIXME: get the remote hostname */
+
return;
}
@@ -266,9 +271,7 @@ fill_x11_info (SessionInfo *si)
return;
}
- /* overwrite the tty value */
- g_free (si->display_device);
- si->display_device = proc_stat_get_tty (xorg_stat);
+ si->x11_display_device = proc_stat_get_tty (xorg_stat);
proc_stat_free (xorg_stat);
si->is_local = TRUE;
@@ -302,6 +305,13 @@ fill_session_info (SessionInfo *si)
fill_x11_info (si);
+ if (! si->is_local_is_set) {
+ /* FIXME: how should we set this? */
+ /* non x11 sessions must be local I guess */
+ si->is_local = TRUE;
+ si->is_local_is_set = TRUE;
+ }
+
return TRUE;
}
@@ -309,12 +319,15 @@ static void
print_session_info (SessionInfo *si)
{
printf ("user = %u\n", si->uid);
- if (si->display_device != NULL) {
- printf ("display-device = %s\n", si->display_device);
- }
if (si->x11_display != NULL) {
printf ("x11-display = %s\n", si->x11_display);
}
+ if (si->x11_display_device != NULL) {
+ printf ("x11-display-device = %s\n", si->x11_display_device);
+ }
+ if (si->display_device != NULL) {
+ printf ("display-device = %s\n", si->display_device);
+ }
if (si->session_type != NULL) {
printf ("session-type = %s\n", si->session_type);
}
@@ -355,8 +368,8 @@ main (int argc,
GOptionContext *context;
gboolean ret;
GError *error;
- static int user_id;
- static int process_id;
+ static int user_id = -1;
+ static int process_id = -1;
static GOptionEntry entries [] = {
{ "uid", 0, 0, G_OPTION_ARG_INT, &user_id, "User ID", NULL },
{ "pid", 0, 0, G_OPTION_ARG_INT, &process_id, "Process ID", NULL },