# xsessions-directory = Directory to find X sessions
# default-xsession Default X session to use
# session-wrapper = Program to run sessions through
+# minimum-vt = First VT to run displays on
# seats = list of seats to start displays on
#
[LightDM]
#xsessions-directory=/usr/share/xsessions
#default-xsession=
#session-wrapper=/etc/X11/Xsession
+#minimum-vt=7
seats=seat-0
#
#endif
#include "vt.h"
+#include "configuration.h"
+
+static GList *used_vts = NULL;
gint
vt_get_active (void)
#endif
}
-gint
-vt_get_unused (void)
+static gboolean
+vt_is_used (gint number)
{
-#ifdef __linux__
- gint console_fd;
- int number;
+ GList *link;
- console_fd = g_open ("/dev/console", O_RDONLY | O_NOCTTY);
- if (console_fd < 0)
+ for (link = used_vts; link; link = link->next)
{
- g_warning ("Error opening /dev/console: %s", strerror (errno));
- return -1;
+ int n = GPOINTER_TO_INT (link->data);
+ if (n == number)
+ return TRUE;
}
- if (ioctl (console_fd, VT_OPENQRY, &number) < 0)
- g_warning ("Error using VT_OPENQRY on /dev/console: %s", strerror (errno));
+ return FALSE;
+}
- close (console_fd);
-
+gint
+vt_get_unused (void)
+{
+ gint number;
+
+ number = config_get_integer (config_get_instance (), "LightDM", "minimum-vt");
+ if (number < 1)
+ number = 1;
+
+ while (vt_is_used (number))
+ number++;
+
+ used_vts = g_list_append (used_vts, GINT_TO_POINTER (number));
+
return number;
-#else
- return -1;
-#endif
}
void
vt_release (gint number)
{
+ GList *link;
+
+ for (link = used_vts; link; link = link->next)
+ {
+ int n = GPOINTER_TO_INT (link->data);
+ if (n == number)
+ break;
+ }
+
+ if (link)
+ used_vts = g_list_remove_link (used_vts, link);
}