AC_SUBST(DEFAULT_XSESSION)
AC_DEFINE_UNQUOTED(DEFAULT_XSESSION, "$DEFAULT_XSESSION", Default X session)
-GREETER_USER=
-AC_ARG_WITH(greeter-user,
- AS_HELP_STRING(--with-greeter-user=<username>,
- User to run greeter as),
- if test x$withval != x; then
- GREETER_USER="$withval"
- fi
-)
-AC_SUBST(GREETER_USER)
-AC_DEFINE_UNQUOTED(GREETER_USER, "$GREETER_USER", User to run greeter as)
-
DEFAULT_PAM_SERVICE=lightdm
AC_ARG_WITH(default-pam-service,
AS_HELP_STRING(--with-default-pam-service=<name>,
Cache dir: $CACHE_DIR
X session dir: $XSESSIONS_DIR
Default X session: $DEFAULT_XSESSION
- Greeter user: $GREETER_USER
PAM service: $DEFAULT_PAM_SERVICE
PAM service (autologins): $DEFAULT_PAM_AUTOLOGIN_SERVICE
Greeter theme directory: $GREETER_THEME_DIR
#
# General configuration
#
+# greeter-user = User to run greeter as
# minimum-display-number = Minimum display number to use for X servers
# minimum-vt = First VT to run displays on
# user-authority-in-system-dir = True if session authority should be in the system location
-# greeter-user = User to run greeter as
# seats = list of seats to start displays on
#
[LightDM]
+#greeter-user=lightdm
#minimum-display-number=0
#minimum-vt=7
#user-authority-in-system-dir=false
-#greeter-user=lightdm
-seats=seat-0
+seats=Seat0
#
# Seat defaults
#
+# xserver-command = X server command to run
# xserver-layout = Layout to pass to X server
# xserver-config = Config file to pass to X server
-# xserver-command = X server command to run
-# greeter-them = Greeter theme to use
+# greeter-theme = Greeter theme to use
# xsession = X session to load by default
# xsession-wrapper = Wrapper script to run X session with
# autologin-user = User to log in with by default
# autologin-user-timeout = Number of seconds to wait before loading default user
#
#[Defaults]
+#xserver-command=/usr/bin/X
#xserver-layout=
#xserver-config=
-#xserver-command=/usr/bin/X
#greeter-theme=example-gtk-gnome
-#xsession=
+#xsession=gnome
#xsession-wrapper=
#autologin-user=
-#autologin-user-timeout=5
+#autologin-user-timeout=0
#
# Seat configuration
# xdmcp-manager = XDMCP manager to connect to
# xdmcp-port = XDMCP UDP/IP port to communicate on
# key = Authentication key to use
-# Can override any of the options from defaults
+# Can override any of the options from defaults e.g. greeter-theme=kde
#
-[seat-0]
+[Seat0]
#xdmcp-manager=
#xdmcp-port=177
#key=0x0123456789ABCD
SeatXDMCPSession *seat;
gboolean result;
- seat = seat_xdmcp_session_new (session);
+ seat = seat_xdmcp_session_new ("XDMCPServer", session);
result = add_seat (manager, SEAT (seat));
g_object_unref (seat);
static gboolean start_greeter (Display *display);
Display *
-display_new (XServer *xserver)
+display_new (const gchar *config_section, XServer *xserver)
{
Display *self = g_object_new (DISPLAY_TYPE, NULL);
self->priv->pam_autologin_service = g_strdup (DEFAULT_PAM_AUTOLOGIN_SERVICE);
self->priv->xserver = g_object_ref (xserver);
+ self->priv->greeter_user = config_get_string (config_get_instance (), config_section, "greeter-user");
+ if (!self->priv->greeter_user)
+ self->priv->greeter_user = config_get_string (config_get_instance (), "Defaults", "greeter-user");
+ self->priv->greeter_theme = config_get_string (config_get_instance (), config_section, "greeter-theme");
+ if (!self->priv->greeter_theme)
+ self->priv->greeter_theme = config_get_string (config_get_instance (), "Defaults", "greeter-theme");
+ self->priv->default_session = config_get_string (config_get_instance (), config_section, "xsession");
+ if (!self->priv->default_session)
+ self->priv->default_session = config_get_string (config_get_instance (), "Defaults", "xsession");
+ self->priv->session_wrapper = config_get_string (config_get_instance (), config_section, "xsession-wrapper");
+ if (!self->priv->session_wrapper)
+ self->priv->session_wrapper = config_get_string (config_get_instance (), "Defaults", "xsession-wrapper");
+
return self;
}
display_init (Display *display)
{
display->priv = G_TYPE_INSTANCE_GET_PRIVATE (display, DISPLAY_TYPE, DisplayPrivate);
- if (strcmp (GREETER_USER, "") != 0)
- display->priv->greeter_user = g_strdup (GREETER_USER);
- display->priv->greeter_theme = config_get_string (config_get_instance (), "LightDM", "default-greeter-theme");
- display->priv->default_session = config_get_string (config_get_instance (), "LightDM", "default-xsession");
}
static void
GType display_get_type (void);
-Display *display_new (XServer *xserver);
+Display *display_new (const gchar *config_section, XServer *xserver);
XServer *display_get_xserver (Display *display);
seat_local_new (const gchar *config_section)
{
SeatLocal *seat;
- gchar *username;
- guint timeout;
seat = g_object_new (SEAT_LOCAL_TYPE, NULL);
seat->priv->config_section = g_strdup (config_section);
-
+ seat_load_config (SEAT (seat), config_section);
seat_set_can_switch (SEAT (seat), TRUE);
- username = config_get_string (config_get_instance (), config_section, "autologin-user");
- timeout = config_get_integer (config_get_instance (), config_section, "autologin-user-timeout");
- if (timeout < 0)
- timeout = 0;
- if (username)
- seat_set_autologin_user (SEAT (seat), username, timeout);
return seat;
}
XServer *xserver;
XAuthorization *authorization = NULL;
gchar *dir, *filename, *path;
- gchar *xserver_command, *xserver_layout, *xserver_config;
gchar *number;
gchar hostname[1024];
Display *display;
g_debug ("Starting display");
- xserver = xserver_new (XSERVER_TYPE_LOCAL, NULL, xserver_get_free_display_number ());
+ xserver = xserver_new (SEAT_LOCAL (seat)->priv->config_section, XSERVER_TYPE_LOCAL, NULL, xserver_get_free_display_number ());
number = g_strdup_printf ("%d", xserver_get_display_number (xserver));
gethostname (hostname, 1024);
authorization = xauth_new_cookie (XAUTH_FAMILY_LOCAL, hostname, number);
g_free (dir);
g_free (path);
- xserver_command = config_get_string (config_get_instance (), "Defaults", "xserver-command");
- if (!xserver_command)
- xserver_command = config_get_string (config_get_instance (), SEAT_LOCAL (seat)->priv->config_section, "xserver-command");
- if (xserver_command)
- xserver_set_command (xserver, xserver_command);
- g_free (xserver_command);
if (config_get_boolean (config_get_instance (), "LightDM", "use-xephyr"))
xserver_set_command (xserver, "Xephyr");
- xserver_layout = config_get_string (config_get_instance (), "Defaults", "layout");
- if (!xserver_layout)
- xserver_layout = config_get_string (config_get_instance (), SEAT_LOCAL (seat)->priv->config_section, "xserver-layout");
- if (xserver_layout)
- xserver_set_layout (xserver, xserver_layout);
- g_free (xserver_layout);
-
- xserver_config = config_get_string (config_get_instance (), "Defaults", "xserver-config");
- if (!xserver_config)
- xserver_config = config_get_string (config_get_instance (), SEAT_LOCAL (seat)->priv->config_section, "xserver-config");
- if (xserver_config)
- xserver_set_config_file (xserver, xserver_config);
- g_free (xserver_config);
-
- display = display_new (xserver);
+ display = display_new (SEAT_LOCAL (seat)->priv->config_section, xserver);
g_object_unref (xserver);
return display;
seat = g_object_new (SEAT_XDMCP_CLIENT_TYPE, NULL);
seat->priv->config_section = g_strdup (config_section);
+ seat_load_config (SEAT (seat), config_section);
return seat;
}
XServer *xserver;
XAuthorization *authorization = NULL;
gchar *xdmcp_manager, *dir, *filename, *path;
- gchar *xserver_command, *xserver_layout, *xserver_config;
gint port;
//gchar *key;
g_debug ("Starting seat %s", SEAT_XDMCP_CLIENT (seat)->priv->config_section);
xdmcp_manager = config_get_string (config_get_instance (), SEAT_XDMCP_CLIENT (seat)->priv->config_section, "xdmcp-manager");
- xserver = xserver_new (XSERVER_TYPE_LOCAL_TERMINAL, xdmcp_manager, xserver_get_free_display_number ());
+ xserver = xserver_new (SEAT_XDMCP_CLIENT (seat)->priv->config_section, XSERVER_TYPE_LOCAL_TERMINAL, xdmcp_manager, xserver_get_free_display_number ());
g_free (xdmcp_manager);
port = config_get_integer (config_get_instance (), SEAT_XDMCP_CLIENT (seat)->priv->config_section, "xdmcp-port");
g_free (dir);
g_free (path);
- xserver_command = config_get_string (config_get_instance (), "Defaults", "xserver-command");
- if (!xserver_command)
- xserver_command = config_get_string (config_get_instance (), SEAT_XDMCP_CLIENT (seat)->priv->config_section, "xserver-command");
- if (xserver_command)
- xserver_set_command (xserver, xserver_command);
- g_free (xserver_command);
if (config_get_boolean (config_get_instance (), "LightDM", "use-xephyr"))
xserver_set_command (xserver, "Xephyr");
- xserver_layout = config_get_string (config_get_instance (), "Defaults", "layout");
- if (!xserver_layout)
- xserver_layout = config_get_string (config_get_instance (), SEAT_XDMCP_CLIENT (seat)->priv->config_section, "xserver-layout");
- if (xserver_layout)
- xserver_set_layout (xserver, xserver_layout);
- g_free (xserver_layout);
-
- xserver_config = config_get_string (config_get_instance (), "Defaults", "xserver-config");
- if (!xserver_config)
- xserver_config = config_get_string (config_get_instance (), SEAT_XDMCP_CLIENT (seat)->priv->config_section, "xserver-config");
- if (xserver_config)
- xserver_set_config_file (xserver, xserver_config);
- g_free (xserver_config);
-
- SEAT_XDMCP_CLIENT (seat)->priv->display = g_object_ref (display_new (xserver));
+ SEAT_XDMCP_CLIENT (seat)->priv->display = g_object_ref (display_new (SEAT_XDMCP_CLIENT (seat)->priv->config_section, xserver));
g_object_unref (xserver);
return SEAT_XDMCP_CLIENT (seat)->priv->display;
struct SeatXDMCPSessionPrivate
{
+ /* The section in the config for this seat */
+ gchar *config_section;
+
/* Session being serviced */
XDMCPSession *session;
};
G_DEFINE_TYPE (SeatXDMCPSession, seat_xdmcp_session, SEAT_TYPE);
SeatXDMCPSession *
-seat_xdmcp_session_new (XDMCPSession *session)
+seat_xdmcp_session_new (const gchar *config_section, XDMCPSession *session)
{
SeatXDMCPSession *seat;
seat = g_object_new (SEAT_XDMCP_SESSION_TYPE, NULL);
seat->priv->session = g_object_ref (session);
+ seat_load_config (SEAT (seat), config_section);
return seat;
}
// FIXME: Try IPv6 then fallback to IPv4
address = g_inet_address_to_string (G_INET_ADDRESS (xdmcp_session_get_address (SEAT_XDMCP_SESSION (seat)->priv->session)));
- xserver = xserver_new (XSERVER_TYPE_REMOTE, address, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session));
+ xserver = xserver_new (SEAT_XDMCP_SESSION (seat)->priv->config_section, XSERVER_TYPE_REMOTE, address, xdmcp_session_get_display_number (SEAT_XDMCP_SESSION (seat)->priv->session));
if (strcmp (xdmcp_session_get_authorization_name (SEAT_XDMCP_SESSION (seat)->priv->session), "") != 0)
{
}
g_free (address);
- display = display_new (xserver);
+ display = display_new (SEAT_XDMCP_SESSION (seat)->priv->config_section, xserver);
g_object_unref (xserver);
return display;
static void
seat_xdmcp_session_finalize (GObject *object)
{
- //SeatXDMCPSession *self;
+ SeatXDMCPSession *self;
+
+ self = SEAT_XDMCP_SESSION (object);
- //self = SEAT_XDMCP_SESSION (object);
+ g_free (self->priv->config_section);
G_OBJECT_CLASS (seat_xdmcp_session_parent_class)->finalize (object);
}
GType seat_xdmcp_session_get_type (void);
-SeatXDMCPSession *seat_xdmcp_session_new (XDMCPSession *session);
+SeatXDMCPSession *seat_xdmcp_session_new (const gchar *config_section, XDMCPSession *session);
G_END_DECLS
G_DEFINE_TYPE (Seat, seat, G_TYPE_OBJECT);
+void
+seat_load_config (Seat *seat, const gchar *config_section)
+{
+ gchar *username;
+ guint timeout;
+
+ username = config_get_string (config_get_instance (), config_section, "autologin-user");
+ if (!username)
+ username = config_get_string (config_get_instance (), "Defaults", "autologin-user");
+ if (config_has_key (config_get_instance (), config_section, "autologin-user-timeout"))
+ timeout = config_get_integer (config_get_instance (), config_section, "autologin-user-timeout");
+ else
+ timeout = config_get_integer (config_get_instance (), "Defaults", "autologin-user-timeout");
+ if (timeout < 0)
+ timeout = 0;
+ seat_set_autologin_user (SEAT (seat), username, timeout);
+}
+
void
seat_set_can_switch (Seat *seat, gboolean can_switch)
{
GType seat_get_type (void);
+void seat_load_config (Seat *seat, const gchar *config_section);
+
void seat_set_can_switch (Seat *seat, gboolean can_switch);
void seat_set_autologin_user (Seat *seat, const gchar *username, guint timeout);
}
XServer *
-xserver_new (XServerType type, const gchar *hostname, gint display_number)
+xserver_new (const gchar *config_section, XServerType type, const gchar *hostname, gint display_number)
{
XServer *self = g_object_new (XSERVER_TYPE, NULL);
self->priv->type = type;
self->priv->hostname = g_strdup (hostname);
self->priv->display_number = display_number;
+
+ self->priv->command = config_get_string (config_get_instance (), "Defaults", "xserver-command");
+ if (!self->priv->command)
+ self->priv->command = config_get_string (config_get_instance (), config_section, "xserver-command");
+
+ self->priv->layout = config_get_string (config_get_instance (), "Defaults", "layout");
+ if (!self->priv->layout)
+ self->priv->layout = config_get_string (config_get_instance (), config_section, "xserver-layout");
+
+ self->priv->config_file = config_get_string (config_get_instance (), "Defaults", "xserver-config");
+ if (!self->priv->config_file)
+ self->priv->config_file = config_get_string (config_get_instance (), config_section, "xserver-config");
return self;
}
GType xserver_get_type (void);
-XServer *xserver_new (XServerType type, const gchar *hostname, gint display_number);
+XServer *xserver_new (const gchar *config_section, XServerType type, const gchar *hostname, gint display_number);
XServerType xserver_get_server_type (XServer *server);
[LightDM]
seats=test-seat
-[test-seat]
-default-user=alice
+[Defaults]
+autologin-user=alice
[test-session-config]
logout=true
[LightDM]
seats=test-seat
-[test-seat]
-default-user=alice
+[Defaults]
+autologin-user=alice
[test-session-config]
crash-xserver=true
[LightDM]
seats=test-seat
-[test-seat]
-default-user=alice
+[Defaults]
+autologin-user=alice
-[xdmcp]
+[XDMCPServer]
enabled=true
port=9999
[LightDM]
seats=test-seat
-[test-seat]
-xserver=test-xserver
-
[test-xserver-config]
return-value=1