diff options
-rw-r--r-- | daemon/gdm-session.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c index 016913dd..7dd13ba1 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -121,6 +121,8 @@ struct _GdmSessionPrivate GDBusServer *worker_server; GDBusServer *outside_server; GHashTable *environment; + + gboolean is_program_session : 1; }; enum { @@ -158,6 +160,10 @@ enum { LAST_SIGNAL }; +#ifdef ENABLE_WAYLAND_SUPPORT +static gboolean gdm_session_is_wayland_session (GdmSession *self); +#endif + static guint signals [LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE (GdmSession, @@ -2123,6 +2129,8 @@ gdm_session_setup_for_program (GdmSession *self, g_return_if_fail (GDM_IS_SESSION (self)); send_setup_for_program (self, service_name, username, log_file); + + self->priv->is_program_session = TRUE; } void @@ -2462,6 +2470,7 @@ gdm_session_start_session (GdmSession *self, GdmSessionConversation *conversation; char *command; char *program; + gboolean is_x11 = TRUE; g_return_if_fail (GDM_IS_SESSION (self)); g_return_if_fail (self->priv->session_conversation == NULL); @@ -2477,10 +2486,20 @@ gdm_session_start_session (GdmSession *self, stop_all_other_conversations (self, conversation, FALSE); if (self->priv->selected_program == NULL) { + GdmSessionDisplayMode display_mode; command = get_session_command (self); + display_mode = gdm_session_get_display_mode (self); + +#ifdef ENABLE_WAYLAND_SUPPORT + is_x11 = !gdm_session_is_wayland_session (self); +#endif + if (gdm_session_bypasses_xsession (self)) { program = g_strdup (command); + } else if (is_x11 && + display_mode == GDM_SESSION_DISPLAY_MODE_NEW_VT) { + program = g_strdup_printf ("/usr/bin/xinit " GDMCONFDIR "/Xsession \"%s\" -- /usr/bin/Xorg :%u", command, g_random_int_range (G_MAXINT / 2, G_MAXINT)); } else { program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command); } @@ -2782,6 +2801,10 @@ gdm_session_get_display_mode (GdmSession *self) } #endif + if (self->priv->is_program_session) { + return GDM_SESSION_DISPLAY_MODE_REUSE_VT; + } + return GDM_SESSION_DISPLAY_MODE_NEW_VT; } |