diff -up gdm-3.14.2/daemon/gdm-session-worker.c.fix-headless gdm-3.14.2/daemon/gdm-session-worker.c
--- gdm-3.14.2/daemon/gdm-session-worker.c.fix-headless 2015-06-23 10:42:17.802937143 -0400
+++ gdm-3.14.2/daemon/gdm-session-worker.c 2015-06-23 10:52:26.055317210 -0400
@@ -2059,6 +2059,43 @@ fail:
}
#endif
+#ifdef __linux__
+static gboolean
+set_xdg_vtnr_to_current_vt (GdmSessionWorker *worker)
+{
+ int fd;
+ char vt_string[256];
+ struct vt_stat vt_state = { 0 };
+
+ fd = open ("/dev/tty0", O_RDWR | O_NOCTTY);
+
+ if (fd < 0) {
+ g_debug ("GdmSessionWorker: couldn't open VT master: %m");
+ return FALSE;
+ }
+
+ if (ioctl (fd, VT_GETSTATE, &vt_state) < 0) {
+ g_debug ("GdmSessionWorker: couldn't get current VT: %m");
+ goto fail;
+ }
+
+ close (fd);
+ fd = -1;
+
+ g_snprintf (vt_string, sizeof (vt_string), "%d", vt_state.v_active);
+
+ gdm_session_worker_set_environment_variable (worker,
+ "XDG_VTNR",
+ vt_string);
+
+ return TRUE;
+
+fail:
+ close (fd);
+ return FALSE;
+}
+#endif
+
static gboolean
set_up_for_current_vt (GdmSessionWorker *worker,
GError **error)
@@ -2124,6 +2161,16 @@ set_up_for_current_vt (GdmSessionWorker
g_free (pam_xauth);
}
#endif
+
+#ifdef __linux__
+ if (g_strcmp0 (worker->priv->display_seat_id, "seat0") == 0) {
+ g_debug ("GdmSessionWorker: setting XDG_VTNR to current vt");
+ set_xdg_vtnr_to_current_vt (worker);
+ } else {
+ g_debug ("GdmSessionWorker: not setting XDG_VTNR since not seat0");
+ }
+#endif
+
return TRUE;
out:
return FALSE;