From: "Nirbheek Chauhan" <nirbheek@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gnome:master commit in: gnome-base/gdm/, gnome-base/gdm/files/
Date: Fri, 15 Apr 2011 19:36:56 +0000 (UTC) [thread overview]
Message-ID: <c0ded3e0fe2576cf70a224394ee08d18b6fcfd98.nirbheek@gentoo> (raw)
commit: c0ded3e0fe2576cf70a224394ee08d18b6fcfd98
Author: Nirbheek Chauhan <nirbheek <AT> gentoo <DOT> org>
AuthorDate: Fri Apr 15 19:31:06 2011 +0000
Commit: Nirbheek Chauhan <nirbheek <AT> gentoo <DOT> org>
CommitDate: Fri Apr 15 19:35:43 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gnome.git;a=commit;h=c0ded3e0
gnome-base/gdm: fix bug 261339, bug 288852, bug 284053, remove old cruft
* VT detection should finally be fixed. See patch for details.
---
.../gdm/files/gdm-3.0.0-fix-vt-problems.patch | 195 ++++++++++++++++++++
.../gdm/{gdm-3.0.0.ebuild => gdm-3.0.0-r1.ebuild} | 33 +---
2 files changed, 202 insertions(+), 26 deletions(-)
diff --git a/gnome-base/gdm/files/gdm-3.0.0-fix-vt-problems.patch b/gnome-base/gdm/files/gdm-3.0.0-fix-vt-problems.patch
new file mode 100644
index 0000000..b7ceb49
--- /dev/null
+++ b/gnome-base/gdm/files/gdm-3.0.0-fix-vt-problems.patch
@@ -0,0 +1,195 @@
+From 64002e623fea54ab10040206d164c5fdee4a43d2 Mon Sep 17 00:00:00 2001
+From: Nirbheek Chauhan <nirbheek@gentoo.org>
+Date: Fri, 15 Apr 2011 22:13:44 +0530
+Subject: [PATCH] Fix VT grab race with getty causing X to grab the wrong VT
+
+On bootup, if X is spawned without any args, it'll take up the first unused VT.
+If GDM starts up before gettys are spawned, X takes up VT1 or VT2 depending on
+the init system and bootsplash.
+
+This is problematic because afterwards getty will come up underneath X, and
+cause keyboard problems and eventually crash X.
+
+So we read /etc/inittab, check for open VTs, compare the two values, and take
+the conservative one.
+---
+ configure.ac | 4 ++
+ daemon/Makefile.am | 1 +
+ daemon/gdm-server.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 110 insertions(+), 1 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ca0f8bb..b9e7462 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -302,6 +302,10 @@ AC_CHECK_TYPE(socklen_t,,
+ AC_CHECK_HEADERS(sys/sockio.h)
+ AC_CHECK_FUNCS([setresuid setenv unsetenv clearenv])
+
++dnl Needed for querying the kernel for free VTs
++AC_CHECK_HEADERS(sys/vt.h)
++AC_CHECK_HEADERS(sys/ioctl.h)
++
+ dnl checks needed for Darwin compatibility to linux **environ.
+ AC_CHECK_HEADERS(crt_externs.h)
+ AC_CHECK_FUNCS(_NSGetEnviron)
+diff --git a/daemon/Makefile.am b/daemon/Makefile.am
+index da18835..c1b6bda 100644
+--- a/daemon/Makefile.am
++++ b/daemon/Makefile.am
+@@ -14,6 +14,7 @@ AM_CPPFLAGS = \
+ -DLIBEXECDIR=\"$(libexecdir)\" \
+ -DLOGDIR=\"$(logdir)\" \
+ -DSBINDIR=\"$(sbindir)\" \
++ -DSYSCONFDIR=\""$(sysconfdir)"\" \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
+ -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
+ -DGDM_SCREENSHOT_DIR=\"$(GDM_SCREENSHOT_DIR)\" \
+diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
+index 339f3cc..29d16dc 100644
+--- a/daemon/gdm-server.c
++++ b/daemon/gdm-server.c
+@@ -26,6 +26,8 @@
+ #include <unistd.h>
+ #include <string.h>
+ #include <sys/types.h>
++#include <sys/ioctl.h>
++#include <sys/vt.h>
+ #include <sys/wait.h>
+ #include <errno.h>
+ #include <ctype.h>
+@@ -42,6 +44,7 @@
+ #include <glib/gi18n.h>
+ #include <glib/gstdio.h>
+ #include <glib-object.h>
++#include <gio/gio.h>
+
+ #include <X11/Xlib.h> /* for Display */
+
+@@ -54,6 +57,8 @@ extern char **environ;
+
+ #define GDM_SERVER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_SERVER, GdmServerPrivate))
+
++#define INITTAB SYSCONFDIR"/inittab"
++
+ /* These are the servstat values, also used as server
+ * process exit codes */
+ #define SERVER_TIMEOUT 2 /* Server didn't start */
+@@ -674,6 +679,105 @@ gdm_server_spawn (GdmServer *server,
+ }
+
+ /**
++ * Parse the inittab file used by getty to spawn VTs to find unused ttys
++ */
++int
++get_free_vt_from_inittab ()
++{
++ GFile *gfile;
++ GFileInputStream *contents;
++ GDataInputStream *dstream;
++ GRegex *getty;
++ GMatchInfo *tty_match = NULL;
++ GSList *tty_list = NULL;
++ GError *error = NULL;
++ gchar *temp = NULL;
++ int vtno = 0;
++
++ gfile = g_file_new_for_path (INITTAB);
++ contents = g_file_read (gfile, NULL, &error);
++ g_object_unref (gfile);
++ if (!contents) {
++ if (error) {
++ g_debug ("Unable to open file %s", INITTAB);
++ g_error_free (error);
++ }
++ goto out;
++ }
++
++ dstream = g_data_input_stream_new (G_INPUT_STREAM (contents));
++ getty = g_regex_new ("^c[0-9]+:.+getty.+tty([0-9]+)", 0, 0, NULL);
++ g_object_unref (contents);
++
++ while (1) {
++ temp = g_data_input_stream_read_line (dstream, NULL, NULL, &error);
++ if (!temp)
++ break;
++ if (!g_regex_match (getty, temp, 0, &tty_match))
++ continue;
++ g_free (temp);
++ temp = g_match_info_fetch (tty_match, 1);
++ if (!temp)
++ continue;
++ tty_list = g_slist_insert_sorted (tty_list, temp, (GCompareFunc)g_strcmp0);
++ g_match_info_free (tty_match);
++ }
++
++ if (error) {
++ g_debug ("Unable to read line from %s", INITTAB);
++ g_error_free (error);
++ goto free;
++ }
++
++ /* Ignore holes in vt allocation, just take the last one */
++ temp = g_slist_last (tty_list)->data;
++ if (temp)
++ vtno = (int) g_ascii_strtoull (temp, NULL, 10) + 1;
++
++free:
++ g_object_unref (dstream);
++ g_regex_unref (getty);
++ g_slist_free_full (tty_list, g_free);
++ g_free (error);
++out:
++ return vtno;
++}
++
++/**
++ * Query the VT_* kernel ioctls to find an empty tty
++ */
++int
++get_free_vt_from_kernel()
++{
++ int fd, vtno = 0;
++
++ fd = open ("/dev/tty0", O_WRONLY, 0);
++ if ((ioctl(fd, VT_OPENQRY, &vtno) < 0) || (vtno == -1)) {
++ vtno = 0;
++ g_debug ("Unable to find a free vt, falling back to Xorg autodetect");
++ }
++ return vtno;
++}
++
++gchar*
++get_free_vt ()
++{
++ int inittab_vtno, kernel_vtno;
++ gchar* vt = NULL;
++
++ inittab_vtno = get_free_vt_from_inittab();
++ if (inittab_vtno > 0)
++ g_debug ("Inittab says vt%i is free\n", inittab_vtno);
++ kernel_vtno = get_free_vt_from_kernel();
++ if (kernel_vtno > 0)
++ g_debug ("Kernel says vt%i is free\n", kernel_vtno);
++ /* Select the greater of the two because getty will use the others */
++ if (kernel_vtno != 0 && inittab_vtno != 0)
++ vt = g_strdup_printf ("vt%i", kernel_vtno > inittab_vtno ? kernel_vtno : inittab_vtno);
++ return vt;
++}
++
++/**
+ * gdm_server_start:
+ * @disp: Pointer to a GdmDisplay structure
+ *
+@@ -686,7 +790,7 @@ gdm_server_start (GdmServer *server)
+ gboolean res;
+
+ /* fork X server process */
+- res = gdm_server_spawn (server, NULL);
++ res = gdm_server_spawn (server, get_free_vt());
+
+ return res;
+ }
+--
+1.7.3.4
+
diff --git a/gnome-base/gdm/gdm-3.0.0.ebuild b/gnome-base/gdm/gdm-3.0.0-r1.ebuild
similarity index 84%
rename from gnome-base/gdm/gdm-3.0.0.ebuild
rename to gnome-base/gdm/gdm-3.0.0-r1.ebuild
index 6b964ab..0e43a55 100644
--- a/gnome-base/gdm/gdm-3.0.0.ebuild
+++ b/gnome-base/gdm/gdm-3.0.0-r1.ebuild
@@ -1,6 +1,6 @@
-# Copyright 1999-2010 Gentoo Foundation
+# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-base/gdm/gdm-2.32.0.ebuild,v 1.2 2010/11/11 11:48:55 ssuominen Exp $
+# $Header: $
EAPI="3"
GCONF_DEBUG="yes"
@@ -90,7 +90,6 @@ pkg_setup() {
--with-xdmcp=yes
--enable-authentication-scheme=pam
--with-pam-prefix=/etc
- SOUND_PROGRAM=/usr/bin/gdmplay
$(use_with accessibility xevie)
$(use_enable ipv6)
$(use_enable xklavier libxklavier)
@@ -112,9 +111,8 @@ src_prepare() {
# daemonize so that the boot process can continue, bug #236701
epatch "${FILESDIR}/${PN}-2.32.0-fix-daemonize-regression.patch"
- # fix VT grab problem causing GDM to grab VT2 instead of 7, bug #261339
- # FIXME FIXME FIXME: this is due to a race b/w getty and gdm
- #epatch "${FILESDIR}/${PN}-2.32.0-broken-VT-detection.patch"
+ # GDM grabs VT2 instead of VT7, bug 261339, bug 284053, bug 288852
+ epatch "${FILESDIR}/${PN}-3.0.0-fix-vt-problems.patch"
# make custom session work, bug #216984
epatch "${FILESDIR}/${PN}-2.32.0-custom-session.patch"
@@ -125,7 +123,7 @@ src_prepare() {
# fix libxklavier automagic support
epatch "${FILESDIR}/${PN}-2.32.0-automagic-libxklavier-support.patch"
- mkdir "${S}"/m4
+ mkdir -p "${S}"/m4
intltoolize --force --copy --automake || die "intltoolize failed"
eautoreconf
}
@@ -135,6 +133,7 @@ src_install() {
local gentoodir="${WORKDIR}/${GDM_EXTRA}"
+ # FIXME: Remove dosym usage, gone in EAPI 4
# gdm-binary should be gdm to work with our init (#5598)
rm -f "${D}/usr/sbin/gdm"
dosym /usr/sbin/gdm-binary /usr/sbin/gdm
@@ -144,14 +143,6 @@ src_install() {
# log, etc.
keepdir /var/log/gdm
- keepdir /var/gdm
-
- fowners root:gdm /var/gdm
- fperms 1770 /var/gdm
-
- # add a custom xsession .desktop by default (#44537)
- exeinto /etc/X11/dm/Sessions
- doexe "${gentoodir}/custom.desktop" || die "doexe 1 failed"
# add xinitrc.d scripts
exeinto /etc/X11/xinit/xinitrc.d
@@ -162,19 +153,9 @@ src_install() {
echo 'XDG_DATA_DIRS="/usr/share/gdm"' > 99xdg-gdm
doenvd 99xdg-gdm || die "doenvd failed"
- # add a custom sound playing script (#248253)
- dobin "${gentoodir}/gdmplay"
-
- # avoid file collision, bug #213118
- rm -f "${D}/usr/share/xsessions/gnome.desktop"
-
- # We replace the pam stuff by our own
- rm -rf "${D}/etc/pam.d"
-
use gnome-keyring && sed -i "s:#Keyring=::g" "${gentoodir}"/pam.d/*
- dopamd "${gentoodir}"/pam.d/*
- dopamsecurity console.apps "${gentoodir}/security/console.apps/gdmsetup"
+ dopamd "${gentoodir}"/pam.d/gdm{,-autologin}
}
pkg_postinst() {
next reply other threads:[~2011-04-15 19:37 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-15 19:36 Nirbheek Chauhan [this message]
-- strict thread matches above, loose matches on Subject: below --
2013-12-11 23:44 [gentoo-commits] proj/gnome:master commit in: gnome-base/gdm/, gnome-base/gdm/files/ Gilles Dartiguelongue
2012-12-26 21:45 Gilles Dartiguelongue
2012-09-12 12:08 Nirbheek Chauhan
2012-09-12 12:06 Nirbheek Chauhan
2012-09-09 0:39 Nirbheek Chauhan
2012-08-18 14:07 Priit Laes
2011-10-23 8:41 Alexandre Restovtsev
2011-08-13 6:08 Alexandre Restovtsev
2011-06-26 6:22 Nirbheek Chauhan
2011-05-03 10:52 Nirbheek Chauhan
2011-04-05 0:57 Nirbheek Chauhan
2011-04-02 13:54 Nirbheek Chauhan
2011-02-26 11:41 Nirbheek Chauhan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c0ded3e0fe2576cf70a224394ee08d18b6fcfd98.nirbheek@gentoo \
--to=nirbheek@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox