vnc-server.h \
vt.c \
vt.h \
- xauthority.c \
- xauthority.h \
+ x-authority.c \
+ x-authority.h \
- x-greeter.c \
- x-greeter.h \
+ x-server-local.c \
+ x-server-local.h \
+ x-server-remote.c \
+ x-server-remote.h \
+ x-server-xvnc.c \
+ x-server-xvnc.h \
+ x-server.c \
+ x-server.h \
- x-session.c \
- x-session.h \
xdmcp-protocol.c \
xdmcp-protocol.h \
xdmcp-server.c \
#include "seat-unity.h"
#include "configuration.h"
- #include "xserver-local.h"
+ #include "x-server-local.h"
-#include "x-greeter.h"
-#include "x-session.h"
+#include "mir-server.h"
#include "vt.h"
#include "plymouth.h"
}
static DisplayServer *
-seat_unity_create_display_server (Seat *seat)
+create_x_server (Seat *seat)
{
- XServerLocal *xserver;
+ XServerLocal *x_server;
const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
gboolean allow_tcp;
gint port = 0;
g_key_file_free (keys);
}
- return DISPLAY_SERVER (xserver);
+ return DISPLAY_SERVER (x_server);
}
+static DisplayServer *
+seat_unity_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_unity_create_greeter_session (Seat *seat)
{
#include <string.h>
#include "seat-xdmcp-session.h"
- #include "xserver-remote.h"
+ #include "x-server-remote.h"
-#include "x-greeter.h"
-#include "x-session.h"
struct SeatXDMCPSessionPrivate
{
{
XAuthority *authority;
gchar *host;
- XServerRemote *xserver;
+ XServerRemote *x_server;
+ if (strcmp (session_type, "x") != 0)
+ {
+ g_warning ("XDMCP seat only supports X display servers, not '%s'", session_type);
+ return NULL;
+ }
+
authority = xdmcp_session_get_authority (SEAT_XDMCP_SESSION (seat)->priv->session);
host = g_inet_address_to_string (xdmcp_session_get_address (SEAT_XDMCP_SESSION (seat)->priv->session));
- xserver = xserver_remote_new (host, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session), authority);
+ x_server = x_server_remote_new (host, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session), authority);
g_free (host);
- return DISPLAY_SERVER (xserver);
+ return DISPLAY_SERVER (x_server);
}
-static Greeter *
-seat_xdmcp_session_create_greeter_session (Seat *seat)
-{
- return GREETER (x_greeter_new ());
-}
-
-static Session *
-seat_xdmcp_session_create_session (Seat *seat)
-{
- return SESSION (x_session_new ());
-}
-
static void
seat_xdmcp_session_init (SeatXDMCPSession *seat)
{
#include "seat-xlocal.h"
#include "configuration.h"
- #include "xserver-local.h"
+ #include "x-server-local.h"
-#include "x-greeter.h"
-#include "x-session.h"
+#include "mir-server.h"
#include "vt.h"
G_DEFINE_TYPE (SeatXLocal, seat_xlocal, SEAT_TYPE);
}
static DisplayServer *
-seat_xlocal_create_display_server (Seat *seat)
+create_x_server (Seat *seat)
{
- XServerLocal *xserver;
+ XServerLocal *x_server;
const gchar *command = NULL, *layout = NULL, *config_file = NULL, *xdmcp_manager = NULL, *key_name = NULL;
gboolean allow_tcp;
gint port = 0;
g_key_file_free (keys);
}
- return DISPLAY_SERVER (xserver);
+ 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)
{
#include "seat-xremote.h"
#include "configuration.h"
- #include "xserver-remote.h"
+ #include "x-server-remote.h"
-#include "x-greeter.h"
-#include "x-session.h"
G_DEFINE_TYPE (SeatXRemote, seat_xremote, SEAT_TYPE);
}
static DisplayServer *
-seat_xremote_create_display_server (Seat *seat)
+seat_xremote_create_display_server (Seat *seat, const gchar *session_type)
{
- XServerRemote *xserver;
+ XServerRemote *x_server;
const gchar *hostname;
gint number;
* license.
*/
+#include <string.h>
+
#include "seat-xvnc.h"
- #include "xserver-xvnc.h"
+ #include "x-server-xvnc.h"
-#include "x-greeter.h"
-#include "x-session.h"
#include "configuration.h"
G_DEFINE_TYPE (SeatXVNC, seat_xvnc, SEAT_TYPE);
}
static DisplayServer *
-seat_xvnc_create_display_server (Seat *seat)
+seat_xvnc_create_display_server (Seat *seat, const gchar *session_type)
{
- XServerXVNC *xserver;
+ XServerXVNC *x_server;
const gchar *command = NULL;
- xserver = xserver_xvnc_new ();
- xserver_xvnc_set_socket (xserver, g_socket_get_fd (SEAT_XVNC (seat)->priv->connection));
+ if (strcmp (session_type, "x") != 0)
+ {
+ g_warning ("XVNC seat only supports X display servers, not '%s'", session_type);
+ return NULL;
+ }
+
+ x_server = x_server_xvnc_new ();
+ x_server_xvnc_set_socket (x_server, g_socket_get_fd (SEAT_XVNC (seat)->priv->connection));
command = config_get_string (config_get_instance (), "VNCServer", "command");
if (command)
gint depth;
depth = config_get_integer (config_get_instance (), "VNCServer", "depth");
if (depth == 8 || depth == 16 || depth == 24 || depth == 32)
- xserver_xvnc_set_depth (xserver, depth);
+ x_server_xvnc_set_depth (x_server, depth);
}
- return DISPLAY_SERVER (xserver);
+ return DISPLAY_SERVER (x_server);
}
-static Greeter *
-seat_xvnc_create_greeter_session (Seat *seat)
-{
- return GREETER (x_greeter_new ());
-}
-
-static Session *
-seat_xvnc_create_session (Seat *seat)
-{
- return SESSION (x_session_new ());
-}
-
static void
seat_xvnc_run_script (Seat *seat, DisplayServer *display_server, Process *script)
{
#include <security/pam_appl.h>
+typedef struct Session Session;
+
#include "display-server.h"
#include "accounts.h"
- #include "xauthority.h"
+ #include "x-authority.h"
G_BEGIN_DECLS
#include <string.h>
#include <xcb/xcb.h>
- #include "xserver.h"
+ #include "x-server.h"
-#include "x-session.h"
+#include "configuration.h"
struct XServerPrivate
{
}
static void
- xserver_setup_session (DisplayServer *display_server, Session *session)
++x_server_setup_session (DisplayServer *display_server, Session *session)
+{
+ gint vt;
+
+ display_server = session_get_display_server (session);
+
+ vt = display_server_get_vt (display_server);
+ if (vt > 0)
+ {
+ gchar *t;
+
+ t = g_strdup_printf ("/dev/tty%d", vt);
+ session_set_tty (session, t);
+ g_free (t);
+
+ t = g_strdup_printf ("%d", vt);
+ session_set_env (session, "XDG_VTNR", t);
+ g_free (t);
+ }
+
- session_set_env (session, "DISPLAY", xserver_get_address (XSERVER (display_server)));
- session_set_tty (session, xserver_get_address (XSERVER (display_server)));
- session_set_xdisplay (session, xserver_get_address (XSERVER (display_server)));
- session_set_remote_host_name (session, xserver_get_hostname (XSERVER (display_server)));
- session_set_xauthority (session,
- xserver_get_authority (XSERVER (display_server)),
- config_get_boolean (config_get_instance (), "LightDM", "user-authority-in-system-dir"));
++ session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server)));
++ session_set_tty (session, x_server_get_address (X_SERVER (display_server)));
++ session_set_xdisplay (session, x_server_get_address (X_SERVER (display_server)));
++ session_set_remote_host_name (session, x_server_get_hostname (X_SERVER (display_server)));
++ session_set_x_authority (session,
++ x_server_get_authority (X_SERVER (display_server)),
++ config_get_boolean (config_get_instance (), "LightDM", "user-authority-in-system-dir"));
+}
+
- static void
- xserver_init (XServer *server)
++void
+ x_server_init (XServer *server)
{
- server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, XSERVER_TYPE, XServerPrivate);
+ server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, X_SERVER_TYPE, XServerPrivate);
}
static void
GObjectClass *object_class = G_OBJECT_CLASS (klass);
DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
- display_server_class->start = xserver_start;
- display_server_class->setup_session = xserver_setup_session;
- object_class->finalize = xserver_finalize;
+ display_server_class->start = x_server_start;
++ display_server_class->setup_session = x_server_setup_session;
+ object_class->finalize = x_server_finalize;
g_type_class_add_private (klass, sizeof (XServerPrivate));
}