]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Load sessions and greeters from /usr/share/lightdm/sessions and /usr/share/lightdm...
authorRobert Ancell <robert.ancell@canonical.com>
Thu, 11 Jul 2013 02:20:58 +0000 (14:20 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Thu, 11 Jul 2013 02:20:58 +0000 (14:20 +1200)
This is to allow new sessions and greeters to be defined that aren't X based.
We will also look in the legacy directories /usr/share/xsessions and /usr/share/xgreeters.
Rename the config options xsessions-directory->sessions-directory and xgreeters-directory->greeters-directory.
Support multiple directories separated by ':'.
Remove the command line --xsessions-dir, --remote-sessions-dir and --xgreeter-dir options.
They were used primarily for the regression tests and are no longer required.

15 files changed:
data/lightdm.conf
liblightdm-gobject/Makefile.am
liblightdm-gobject/session.c
src/Makefile.am
src/display.c
src/lightdm.c
tests/data/greeters/test-gobject-greeter.desktop [moved from tests/data/xgreeters/test-gobject-greeter.desktop with 100% similarity]
tests/data/greeters/test-python-greeter.desktop [moved from tests/data/xgreeters/test-python-greeter.desktop with 100% similarity]
tests/data/greeters/test-qt4-greeter.desktop [moved from tests/data/xgreeters/test-qt4-greeter.desktop with 100% similarity]
tests/data/greeters/test-qt5-greeter.desktop [moved from tests/data/xgreeters/test-qt5-greeter.desktop with 100% similarity]
tests/data/sessions/alternative.desktop [moved from tests/data/xsessions/alternative.desktop with 100% similarity]
tests/data/sessions/default.desktop [moved from tests/data/xsessions/default.desktop with 100% similarity]
tests/src/Makefile.am
tests/src/libsystem.c
tests/src/test-runner.c

index 20148a02dc7ee3fa2888a9c96632fbba4d3d758f..2d584550a4c36b318faf8f21ae8c1aaec4112a3e 100644 (file)
@@ -11,9 +11,9 @@
 # log-directory = Directory to log information to
 # run-directory = Directory to put running state in
 # cache-directory = Directory to cache to
-# xsessions-directory = Directory to find X sessions
+# sessions-directory = Directory to find sessions
 # remote-sessions-directory = Directory to find remote sessions
-# xgreeters-directory = Directory to find X greeters
+# greeters-directory = Directory to find greeters
 # disable-guest-wrapper = Disable using guest session wrapper (temporary? required to make tests work without installing)
 #
 [LightDM]
@@ -27,9 +27,9 @@
 #log-directory=/var/log/lightdm
 #run-directory=/var/run/lightdm
 #cache-directory=/var/cache/lightdm
-#xsessions-directory=/usr/share/xsessions
+#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions
 #remote-sessions-directory=/usr/share/lightdm/remote-sessions
-#xgreeters-directory=/usr/share/xgreeters
+#greeters-directory=/usr/share/lightdm/greeters:/usr/share/xgreeters
 #disable-guest-wrapper=false
 
 #
index 449276ca258748d28e5ef2e82b001d07432768d2..9ab209e87a03cad9586ac6cd104c1ed6befd151c 100644 (file)
@@ -5,7 +5,7 @@ liblightdm_gobject_1_la_LIBADD = $(LIBLIGHTDM_GOBJECT_LIBS)
 liblightdm_gobject_1_la_CFLAGS = $(LIBLIGHTDM_GOBJECT_CFLAGS) \
        $(WARN_CFLAGS) \
        -DCONFIG_DIR=\"$(sysconfdir)/lightdm\" \
-       -DXSESSIONS_DIR=\"$(datadir)/xsessions\" \
+       -DSESSIONS_DIR=\"$(pkgdatadir)/sessions:$(datadir)/xsessions\" \
        -DREMOTE_SESSIONS_DIR=\"$(pkgdatadir)/remote-sessions\"
 
 mainheader_HEADERS = lightdm.h
index f1ccf6cc6161415e494b6ac02166c60c48759375..b6cb4d03ca6272fa6b9768d1e31124cfcf0af9b5 100644 (file)
@@ -105,10 +105,9 @@ load_session (GKeyFile *key_file, const gchar *key)
 }
 
 static GList *
-load_sessions (const gchar *sessions_dir)
+load_sessions_dir (GList *sessions, const gchar *sessions_dir)
 {
     GDir *directory;
-    GList *sessions = NULL;
     GError *error = NULL;
 
     directory = g_dir_open (sessions_dir, 0, &error);
@@ -116,7 +115,7 @@ load_sessions (const gchar *sessions_dir)
         g_warning ("Failed to open sessions directory: %s", error->message);
     g_clear_error (&error);
     if (!directory)
-        return NULL;
+        return sessions;
 
     while (TRUE)
     {
@@ -166,12 +165,27 @@ load_sessions (const gchar *sessions_dir)
     return sessions;
 }
 
+static GList *
+load_sessions (const gchar *sessions_dir)
+{
+    GList *sessions = NULL;
+    gchar **dirs;
+    int i;
+
+    dirs = g_strsplit (sessions_dir, ":", -1);
+    for (i = 0; dirs[i]; i++)
+        sessions = load_sessions_dir (sessions, dirs[i]);
+    g_strfreev (dirs);
+  
+    return sessions;
+}
+
 static void
 update_sessions (void)
 {
     GKeyFile *config_key_file = NULL;
     gchar *config_path = NULL;
-    gchar *xsessions_dir;
+    gchar *sessions_dir;
     gchar *remote_sessions_dir;
     gboolean result;
     GError *error = NULL;
@@ -179,7 +193,7 @@ update_sessions (void)
     if (have_sessions)
         return;
 
-    xsessions_dir = g_strdup (XSESSIONS_DIR);
+    sessions_dir = g_strdup (SESSIONS_DIR);
     remote_sessions_dir = g_strdup (REMOTE_SESSIONS_DIR);
 
     /* Use session directory from configuration */
@@ -194,11 +208,11 @@ update_sessions (void)
     {
         gchar *value;
       
-        value = g_key_file_get_string (config_key_file, "LightDM", "xsessions-directory", NULL);
+        value = g_key_file_get_string (config_key_file, "LightDM", "sessions-directory", NULL);
         if (value)
         {
-            g_free (xsessions_dir);
-            xsessions_dir = value;
+            g_free (sessions_dir);
+            sessions_dir = value;
         }
 
         value = g_key_file_get_string (config_key_file, "LightDM", "remote-sessions-directory", NULL);
@@ -211,10 +225,10 @@ update_sessions (void)
     g_key_file_free (config_key_file);
     g_free (config_path);
 
-    local_sessions = load_sessions (xsessions_dir);
+    local_sessions = load_sessions (sessions_dir);
     remote_sessions = load_sessions (remote_sessions_dir);
 
-    g_free (xsessions_dir);
+    g_free (sessions_dir);
     g_free (remote_sessions_dir);
 
     have_sessions = TRUE;
index 1b7fe28465ed297ca09e3f92c4cda347f02bf8a4..415e5cc8e3ee5ca2708b1bf207469f4f14615003 100644 (file)
@@ -89,9 +89,9 @@ lightdm_CFLAGS = \
        -DLOG_DIR=\"$(localstatedir)/log/lightdm\" \
        -DRUN_DIR=\"$(localstatedir)/run/lightdm\" \
        -DCACHE_DIR=\"$(localstatedir)/cache/lightdm\" \
-       -DXSESSIONS_DIR=\"$(datadir)/xsessions\" \
+       -DSESSIONS_DIR=\"$(pkgdatadir)/sessions:$(datadir)/xsessions\" \
        -DREMOTE_SESSIONS_DIR=\"$(pkgdatadir)/remote-sessions\" \
-       -DXGREETERS_DIR=\"$(datadir)/xgreeters\"
+       -DGREETERS_DIR=\"$(pkgdatadir)/greeters:$(datadir)/xgreeters\"
 
 lightdm_LDADD = \
        $(LIGHTDM_LIBS) \
index f849a60e0a6e1f760de6bf0b0f44c6ada5fd130b..5820c9531a275a7aa814b1cbc89cf48c791f8939 100644 (file)
@@ -695,8 +695,9 @@ greeter_session_stopped_cb (Session *session, Display *display)
 static gboolean
 display_start_greeter (Display *display)
 {
-    gchar *log_dir, *filename, *log_filename, *sessions_dir, *path, *wrapper;
+    gchar *log_dir, *filename, *log_filename, *sessions_dir, *wrapper, **dirs;
     gchar **argv;
+    int i;
 
     /* Log the output of the greeter to a system location */
     log_dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
@@ -709,13 +710,22 @@ display_start_greeter (Display *display)
     g_free (log_filename);
 
     /* Load the greeter session information */
-    sessions_dir = config_get_string (config_get_instance (), "LightDM", "xgreeters-directory");
-    filename = g_strdup_printf ("%s.desktop", display->priv->greeter_session);
-    path = g_build_filename (sessions_dir, filename, NULL);
+    sessions_dir = config_get_string (config_get_instance (), "LightDM", "greeters-directory");
+    dirs = g_strsplit (sessions_dir, ":", -1);
     g_free (sessions_dir);
-    g_free (filename);
-    argv = get_session_command (path, NULL);
-    g_free (path);
+    for (i = 0; dirs[i]; i++)
+    {
+        gchar *path;
+
+        filename = g_strdup_printf ("%s.desktop", display->priv->greeter_session);
+        path = g_build_filename (dirs[i], filename, NULL);
+        g_free (filename);
+        argv = get_session_command (path, NULL);
+        g_free (path);
+        if (argv)
+            break;
+    }
+    g_strfreev (dirs);
     if (!argv)
         return TRUE;
 
@@ -747,29 +757,39 @@ static gboolean
 display_start_session (Display *display)
 {
     User *user;
-    gchar *filename, *sessions_dir, *path;
+    gchar *sessions_dir, **dirs;
     const gchar *language;
     gchar **argv;
     gboolean disable_guest_wrapper;
+    int i;
 
     user = session_get_user (display->priv->session);
 
     /* Find the command to run for the selected session */
     if (display->priv->user_session_type == SESSION_TYPE_LOCAL)
     {
-        sessions_dir = config_get_string (config_get_instance (), "LightDM", "xsessions-directory");
+        sessions_dir = config_get_string (config_get_instance (), "LightDM", "sessions-directory");
 
         /* Store this session name so we automatically use it next time */
         user_set_xsession (user, display->priv->user_session);
     }
     else
         sessions_dir = config_get_string (config_get_instance (), "LightDM", "remote-sessions-directory");
-    filename = g_strdup_printf ("%s.desktop", display->priv->user_session);
-    path = g_build_filename (sessions_dir, filename, NULL);
+    dirs = g_strsplit (sessions_dir, ":", -1);
     g_free (sessions_dir);
-    g_free (filename);
-    argv = get_session_command (path, display->priv->session_wrapper);
-    g_free (path);
+    for (i = 0; dirs[i]; i++)
+    {
+        gchar *filename, *path;
+
+        filename = g_strdup_printf ("%s.desktop", display->priv->user_session);
+        path = g_build_filename (dirs[i], filename, NULL);
+        g_free (filename);
+        argv = get_session_command (path, display->priv->session_wrapper);
+        g_free (path);
+        if (argv)
+            break;
+    }
+    g_strfreev (dirs);
     if (!argv)
         return TRUE;
   
index fba6f7aad1ffe470f6b37ea683a1a1b36c9cdaa4..b76bb6ec18eb76b6af69cc1405df5713eb46224a 100644 (file)
@@ -805,9 +805,6 @@ main (int argc, char **argv)
     gboolean explicit_config = FALSE;
     gboolean test_mode = FALSE;
     gchar *pid_path = "/var/run/lightdm.pid";
-    gchar *xsessions_dir = NULL;
-    gchar *remote_sessions_dir = NULL;
-    gchar *xgreeters_dir = NULL;
     gchar *config_dir, *config_d_dir = NULL;
     gchar *log_dir = NULL;
     gchar *run_dir = NULL;
@@ -831,15 +828,6 @@ main (int argc, char **argv)
         { "pid-file", 0, 0, G_OPTION_ARG_STRING, &pid_path,
           /* Help string for command line --pid-file flag */
           N_("File to write PID into"), "FILE" },
-        { "xsessions-dir", 0, 0, G_OPTION_ARG_STRING, &xsessions_dir,
-          /* Help string for command line --xsessions-dir flag */
-          N_("Directory to load X sessions from"), "DIRECTORY" },
-        { "remote-sessions-dir", 0, 0, G_OPTION_ARG_STRING, &remote_sessions_dir,
-          /* Help string for command line --remote-sessions-dir flag */
-          N_("Directory to load remote sessions from"), "DIRECTORY" },
-        { "xgreeters-dir", 0, 0, G_OPTION_ARG_STRING, &xgreeters_dir,
-          /* Help string for command line --xgreeters-dir flag */
-          N_("Directory to load X greeters from"), "DIRECTORY" },
         { "log-dir", 0, 0, G_OPTION_ARG_STRING, &log_dir,
           /* Help string for command line --log-dir flag */
           N_("Directory to write logs to"), "DIRECTORY" },
@@ -949,11 +937,6 @@ main (int argc, char **argv)
         fclose (pid_file);
     }
 
-    /* Always use absolute directories as child processes may run from different locations */
-    xsessions_dir = path_make_absolute (xsessions_dir);
-    remote_sessions_dir = path_make_absolute (remote_sessions_dir);
-    xgreeters_dir = path_make_absolute (xgreeters_dir);
-
     /* If not running as root write output to directories we control */
     if (getuid () != 0)
     {
@@ -1067,12 +1050,12 @@ main (int argc, char **argv)
     if (!config_has_key (config_get_instance (), "LightDM", "cache-directory"))
         config_set_string (config_get_instance (), "LightDM", "cache-directory", default_cache_dir);
     g_free (default_cache_dir);
-    if (!config_has_key (config_get_instance (), "LightDM", "xsessions-directory"))
-        config_set_string (config_get_instance (), "LightDM", "xsessions-directory", XSESSIONS_DIR);
+    if (!config_has_key (config_get_instance (), "LightDM", "sessions-directory"))
+        config_set_string (config_get_instance (), "LightDM", "sessions-directory", SESSIONS_DIR);
     if (!config_has_key (config_get_instance (), "LightDM", "remote-sessions-directory"))
         config_set_string (config_get_instance (), "LightDM", "remote-sessions-directory", REMOTE_SESSIONS_DIR);
-    if (!config_has_key (config_get_instance (), "LightDM", "xgreeters-directory"))
-        config_set_string (config_get_instance (), "LightDM", "xgreeters-directory", XGREETERS_DIR);
+    if (!config_has_key (config_get_instance (), "LightDM", "greeters-directory"))
+        config_set_string (config_get_instance (), "LightDM", "greeters-directory", GREETERS_DIR);
 
     /* Override defaults */
     if (log_dir)
@@ -1084,15 +1067,6 @@ main (int argc, char **argv)
     if (cache_dir)
         config_set_string (config_get_instance (), "LightDM", "cache-directory", cache_dir);
     g_free (cache_dir);
-    if (xsessions_dir)
-        config_set_string (config_get_instance (), "LightDM", "xsessions-directory", xsessions_dir);
-    g_free (xsessions_dir);
-    if (remote_sessions_dir)
-        config_set_string (config_get_instance (), "LightDM", "remote-sessions-directory", remote_sessions_dir);
-    g_free (remote_sessions_dir);
-    if (xgreeters_dir)
-        config_set_string (config_get_instance (), "LightDM", "xgreeters-directory", xgreeters_dir);
-    g_free (xgreeters_dir);
 
     /* Create run and cache directories */
     dir = config_get_string (config_get_instance (), "LightDM", "log-directory");
index 4b65fa0a22918e6cc12cd3aa9ed021c388ccd1dc..33d7cc745850fc8c09f81a6ffa1a67f6a57e64ff 100644 (file)
@@ -23,6 +23,7 @@ libsystem_la_CFLAGS = \
        -DBUILDDIR=\"$(abs_top_builddir)\" \
        -DSYSCONFDIR=\"$(sysconfdir)\" \
        -DLOCALSTATEDIR=\"$(localstatedir)\" \
+       -DDATADIR=\"$(datadir)\" \
        -DCONFIG_DIR=\"$(sysconfdir)/lightdm\"
 libsystem_la_LIBADD = -ldl $(GLIB_LIBS) $(GIO_UNIX_LIBS)
 
index a30ff89f078239b3c77275ec31789f77307cec09..15ff656d1bec73941d95a923618e5aaeb86717ef 100644 (file)
@@ -165,6 +165,9 @@ redirect_path (const gchar *path)
     if (g_str_has_prefix (path, LOCALSTATEDIR))
         return g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "var", path + strlen (LOCALSTATEDIR), NULL);
 
+    if (g_str_has_prefix (path, DATADIR))
+        return g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "usr", "share", path + strlen (DATADIR), NULL);
+
     // Don't redirect if inside the build directory
     if (g_str_has_prefix (path, BUILDDIR))
         return g_strdup (path);
index ce6afd39e9b24dd40b62248110782e1829460832..e4057c5e778fe9d7931c642718b3aa4b2d90d693 100644 (file)
@@ -1660,9 +1660,6 @@ run_lightdm (void)
     if (getenv ("DEBUG"))
         g_string_append (command_line, " --debug");
     g_string_append_printf (command_line, " --cache-dir %s/cache", temp_dir);
-    g_string_append_printf (command_line, " --xsessions-dir=%s/usr/share/xsessions", temp_dir);
-    g_string_append_printf (command_line, " --remote-sessions-dir=%s/usr/share/remote-sessions", temp_dir);
-    g_string_append_printf (command_line, " --xgreeters-dir=%s/usr/share/xgreeters", temp_dir);
 
     test_runner_command = g_strdup_printf ("PATH=%s LD_PRELOAD=%s LD_LIBRARY_PATH=%s LIGHTDM_TEST_ROOT=%s DBUS_SESSION_BUS_ADDRESS=%s %s\n",
                                            g_getenv ("PATH"), g_getenv ("LD_PRELOAD"), g_getenv ("LD_LIBRARY_PATH"), g_getenv ("LIGHTDM_TEST_ROOT"), g_getenv ("DBUS_SESSION_BUS_ADDRESS"),
@@ -1820,9 +1817,9 @@ main (int argc, char **argv)
     /* Set up a skeleton file system */
     g_mkdir_with_parents (g_strdup_printf ("%s/etc", temp_dir), 0755);
     g_mkdir_with_parents (g_strdup_printf ("%s/usr/share", temp_dir), 0755);
-    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/xsessions", temp_dir), 0755);
-    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/remote-sessions", temp_dir), 0755);
-    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/xgreeters", temp_dir), 0755);
+    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/lightdm/sessions", temp_dir), 0755);
+    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/lightdm/remote-sessions", temp_dir), 0755);
+    g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/lightdm/greeters", temp_dir), 0755);
     g_mkdir_with_parents (g_strdup_printf ("%s/tmp", temp_dir), 0755);
     g_mkdir_with_parents (g_strdup_printf ("%s/var/run", temp_dir), 0755);
     g_mkdir_with_parents (g_strdup_printf ("%s/var/log", temp_dir), 0755);
@@ -1852,15 +1849,15 @@ main (int argc, char **argv)
         perror ("Failed to copy configuration");
 
     /* Copy over the greeter files */
-    if (system (g_strdup_printf ("cp %s/xsessions/* %s/usr/share/xsessions", DATADIR, temp_dir)))
-        perror ("Failed to copy xsessions");
-    if (system (g_strdup_printf ("cp %s/remote-sessions/* %s/usr/share/remote-sessions", DATADIR, temp_dir)))
+    if (system (g_strdup_printf ("cp %s/sessions/* %s/usr/share/lightdm/sessions", DATADIR, temp_dir)))
+        perror ("Failed to copy sessions");
+    if (system (g_strdup_printf ("cp %s/remote-sessions/* %s/usr/share/lightdm/remote-sessions", DATADIR, temp_dir)))
         perror ("Failed to copy remote sessions");
-    if (system (g_strdup_printf ("cp %s/xgreeters/* %s/usr/share/xgreeters", DATADIR, temp_dir)))
-        perror ("Failed to copy xgreeters");
+    if (system (g_strdup_printf ("cp %s/greeters/* %s/usr/share/lightdm/greeters", DATADIR, temp_dir)))
+        perror ("Failed to copy greeters");
 
     /* Set up the default greeter */
-    path = g_build_filename (temp_dir, "usr", "share", "xgreeters", "default.desktop", NULL);
+    path = g_build_filename (temp_dir, "usr", "share", "lightdm", "greeters", "default.desktop", NULL);
     greeter = g_strdup_printf ("%s.desktop", argv[2]);
     if (symlink (greeter, path) < 0)
     {