#include "seat-xlocal.h"
#include "configuration.h"
#include "x-server-local.h"
-#include "mir-server.h"
#include "plymouth.h"
#include "vt.h"
g_signal_handlers_disconnect_matched (x_server, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, x_server_transition_plymouth_cb, NULL);
}
-static void
-x_server_stopped_cb (XServerLocal *x_server, Seat *seat)
-{
- gint vt;
-
- /* Can re-use the VT */
- vt = display_server_get_vt (DISPLAY_SERVER (x_server));
- if (vt > 0)
- vt_unref (vt);
-
- g_signal_handlers_disconnect_matched (x_server, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, x_server_stopped_cb, NULL);
-}
-
static DisplayServer *
-create_x_server (Seat *seat)
-{
+seat_xlocal_create_display_server (Seat *seat, const gchar *session_type, gboolean is_greeter)
+{
+ if (strcmp (session_type, "x") != 0)
+ return NULL;
+
XServerLocal *x_server;
- const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
+ const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL, *xdg_seat = NULL;
gboolean allow_tcp;
gint vt = -1, port = 0;
if (vt > 0)
- g_debug ("Starting local X display on VT %d", vt);
+ l_debug (seat, "Starting local X display on VT %d", vt);
else
- g_debug ("Starting local X display");
+ l_debug (seat, "Starting local X display");
x_server = x_server_local_new ();
plymouth_deactivate ();
}
else
- g_debug ("Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
+ l_debug (seat, "Plymouth is running on VT %d, but this is less than the configured minimum of %d so not replacing it", active_vt, vt_get_min ());
}
if (plymouth_get_is_active ())
plymouth_quit (FALSE);
if (vt < 0)
vt = vt_get_unused ();
if (vt >= 0)
- {
- vt_ref (vt);
x_server_local_set_vt (x_server, vt);
- g_signal_connect (x_server, "stopped", G_CALLBACK (x_server_stopped_cb), seat);
- }
layout = seat_get_string_property (seat, "xserver-layout");
if (layout)
x_server_local_set_layout (x_server, layout);
+
+ xdg_seat = seat_get_string_property (seat, "xdg-seat");
+ if (xdg_seat)
+ x_server_local_set_xdg_seat (x_server, xdg_seat);
config_file = seat_get_string_property (seat, "xserver-config");
if (config_file)
keys = g_key_file_new ();
result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
if (error)
- g_debug ("Error getting key %s", error->message);
+ l_debug (seat, "Error getting key %s", error->message);
g_clear_error (&error);
if (result)
if (g_key_file_has_key (keys, "keyring", key_name, NULL))
key = g_key_file_get_string (keys, "keyring", key_name, NULL);
else
- g_debug ("Key %s not defined", key_name);
+ l_debug (seat, "Key %s not defined", key_name);
if (key)
x_server_local_set_xdmcp_key (x_server, key);
return DISPLAY_SERVER (x_server);
}
-static DisplayServer *
-seat_xlocal_create_display_server (Seat *seat, const gchar *session_type)
-{
- if (strcmp (session_type, "x") == 0)
- return create_x_server (seat);
- else if (strcmp (session_type, "mir") == 0)
- return DISPLAY_SERVER (mir_server_new ());
- else
- {
- g_warning ("Can't create unsupported display server '%s'", session_type);
- return NULL;
- }
-}
-
static Greeter *
seat_xlocal_create_greeter_session (Seat *seat)
{
Greeter *greeter_session;
+ const gchar *xdg_seat;
greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);
- session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");
+ xdg_seat = seat_get_string_property (seat, "xdg-seat");
+ if (!xdg_seat)
+ xdg_seat = "seat0";
+ l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+ session_set_env (SESSION (greeter_session), "XDG_SEAT", xdg_seat);
return greeter_session;
}
seat_xlocal_create_session (Seat *seat)
{
Session *session;
+ const gchar *xdg_seat;
session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);
- session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+ xdg_seat = seat_get_string_property (seat, "xdg-seat");
+ if (!xdg_seat)
+ xdg_seat = "seat0";
+ l_debug (seat, "Setting XDG_SEAT=%s", xdg_seat);
+ session_set_env (SESSION (session), "XDG_SEAT", xdg_seat);
return session;
}
for (link = seat_get_sessions (seat); link; link = link->next)
{
Session *session = link->data;
- if (display_server_get_vt (session_get_display_server (session)) == vt)
+ DisplayServer *display_server;
+
+ display_server = session_get_display_server (session);
+ if (display_server && display_server_get_vt (display_server) == vt)
return session;
}