diff options
author | Parabola <dev@list.parabolagnulinux.org> | 2011-04-05 14:26:38 +0000 |
---|---|---|
committer | Parabola <dev@list.parabolagnulinux.org> | 2011-04-05 14:26:38 +0000 |
commit | 415856bdd4f48ab4f2732996f0bae58595092bbe (patch) | |
tree | ede2018b591f6dfb477fe9341ba17b9bc000fab9 /gnome-unstable/gdm |
Tue Apr 5 14:26:38 UTC 2011
Diffstat (limited to 'gnome-unstable/gdm')
-rw-r--r-- | gnome-unstable/gdm/2.91_fix_external_program_directories.patch | 48 | ||||
-rw-r--r-- | gnome-unstable/gdm/PKGBUILD | 63 | ||||
-rw-r--r-- | gnome-unstable/gdm/fix_crasher_with_gtk307.patch | 104 | ||||
-rwxr-xr-x | gnome-unstable/gdm/gdm | 36 | ||||
-rw-r--r-- | gnome-unstable/gdm/gdm-autologin.pam | 8 | ||||
-rw-r--r-- | gnome-unstable/gdm/gdm-vt-allocation-hack.patch | 118 | ||||
-rw-r--r-- | gnome-unstable/gdm/gdm.install | 44 | ||||
-rw-r--r-- | gnome-unstable/gdm/gdm.pam | 10 |
8 files changed, 431 insertions, 0 deletions
diff --git a/gnome-unstable/gdm/2.91_fix_external_program_directories.patch b/gnome-unstable/gdm/2.91_fix_external_program_directories.patch new file mode 100644 index 000000000..912b5cdae --- /dev/null +++ b/gnome-unstable/gdm/2.91_fix_external_program_directories.patch @@ -0,0 +1,48 @@ +diff -Nur gdm-2.91.91.orig/daemon/gdm-server.c gdm-2.91.91/daemon/gdm-server.c +--- gdm-2.91.91.orig/daemon/gdm-server.c 2011-02-17 19:27:53.000000000 -0800 ++++ gdm-2.91.91/daemon/gdm-server.c 2011-02-27 16:56:51.283347074 -0800 +@@ -131,7 +131,7 @@ + g_return_val_if_fail (GDM_IS_SERVER (server), NULL); + + error = NULL; +- command = g_strdup_printf (LIBEXECDIR "/ck-get-x11-display-device --display %s", ++ command = g_strdup_printf ("/usr/lib/ConsoleKit/ck-get-x11-display-device --display %s", + server->priv->display_name); + + g_debug ("GdmServer: Running helper %s", command); +diff -Nur gdm-2.91.91.orig/data/greeter-autostart/gnome-settings-daemon.desktop.in.in gdm-2.91.91/data/greeter-autostart/gnome-settings-daemon.desktop.in.in +--- gdm-2.91.91.orig/data/greeter-autostart/gnome-settings-daemon.desktop.in.in 2011-02-17 19:27:53.000000000 -0800 ++++ gdm-2.91.91/data/greeter-autostart/gnome-settings-daemon.desktop.in.in 2011-02-26 08:43:28.700009251 -0800 +@@ -1,8 +1,8 @@ + [Desktop Entry] + Type=Application + _Name=GNOME Settings Daemon +-TryExec=@LIBEXECDIR@/gnome-settings-daemon +-Exec=@LIBEXECDIR@/gnome-settings-daemon ++TryExec=/usr/bin/gnome-settings-daemon ++Exec=/usr/bin/gnome-settings-daemon + OnlyShowIn=GNOME; + X-GNOME-Autostart-Phase=Initialization + X-GNOME-Autostart-Notify=true +diff -Nur gdm-2.91.91.orig/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in.in gdm-2.91.91/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in.in +--- gdm-2.91.91.orig/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in.in 2011-02-17 19:27:53.000000000 -0800 ++++ gdm-2.91.91/data/greeter-autostart/polkit-gnome-authentication-agent-1.desktop.in.in 2011-02-26 08:44:06.810009153 -0800 +@@ -1,5 +1,5 @@ + [Desktop Entry] + Type=Application + _Name=PolicyKit Authentication Agent +-Exec=@LIBEXECDIR@/polkit-gnome-authentication-agent-1 ++Exec=/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + OnlyShowIn=GNOME; +diff -Nur gdm-2.91.91.orig/gui/simple-chooser/gdm-chooser-session.c gdm-2.91.91/gui/simple-chooser/gdm-chooser-session.c +--- gdm-2.91.91.orig/gui/simple-chooser/gdm-chooser-session.c 2011-02-17 19:27:53.000000000 -0800 ++++ gdm-2.91.91/gui/simple-chooser/gdm-chooser-session.c 2011-02-26 08:45:01.946675918 -0800 +@@ -131,7 +131,7 @@ + ret = FALSE; + + error = NULL; +- g_spawn_command_line_async (LIBEXECDIR "/gnome-settings-daemon", &error); ++ g_spawn_command_line_async ("/usr/bin/gnome-settings-daemon", &error); + if (error != NULL) { + g_warning ("Error starting settings daemon: %s", error->message); + g_error_free (error); diff --git a/gnome-unstable/gdm/PKGBUILD b/gnome-unstable/gdm/PKGBUILD new file mode 100644 index 000000000..298618f69 --- /dev/null +++ b/gnome-unstable/gdm/PKGBUILD @@ -0,0 +1,63 @@ +# $Id: PKGBUILD 117769 2011-04-04 17:48:05Z heftig $ +# Maintainer: Jan de Groot <jgc@archlinux.org> +pkgname=gdm +pkgver=3.0.0 +pkgrel=1 +pkgdesc="Gnome Display Manager (a reimplementation of xdm)" +arch=('i686' 'x86_64') +license=('GPL') +url="http://www.gnome.org" +backup=('etc/pam.d/gdm' 'etc/pam.d/gdm-autologin' 'etc/gdm/custom.conf') +groups=('gnome') +options=('!libtool') +depends=('libcanberra' 'libxklavier' 'tcp_wrappers' 'gnome-session' 'upower' 'accountsservice' 'consolekit') +makedepends=('intltool' 'gnome-doc-utils' 'xorg-server') +conflicts=('fast-user-switch-applet') +replaces=('fast-user-switch-applet') +install=gdm.install +source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.bz2 + 2.91_fix_external_program_directories.patch + gdm-vt-allocation-hack.patch + gdm.pam + gdm-autologin.pam + gdm + fix_crasher_with_gtk307.patch) +sha256sums=('2d6443912272c0aa339a06b58d797cc11ce6b0854dadfcc027408f546da7aeff' + '92c5eb913b9556cffe9b5bb89e5c3435703e929addfb98145442f58af5d532c1' + '3c8b588d4af08d94dc93bcd5e4c2a983c3f4fbbbe40833bceac2a1df4f1e8215' + 'f1dfa4d88288d4b0a631a68a51b46c2da537bee8fe5a99f9f288c8ff75a50b19' + '3daff680ff6b7ea56f84f40843e46e72477c81e9e405028203c942af04d07ae5' + '272c08d8e8b50bf424d0705ac864d4c18c47ec4f6893b1af732c2efbc86c9550' + '6d08951919dcb1f928dd67c0b5a5c209b32464c2374ee7d2369ed8e914d541c9') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np1 -i "${srcdir}/2.91_fix_external_program_directories.patch" + patch -Np1 -i "${srcdir}/gdm-vt-allocation-hack.patch" + + #https://bugzilla.gnome.org/show_bug.cgi?id=646498 + patch -Np1 -i "${srcdir}/fix_crasher_with_gtk307.patch" + + ./configure --prefix=/usr --sysconfdir=/etc \ + --libexecdir=/usr/lib/gdm --localstatedir=/var --disable-static \ + --with-at-spi-registryd-directory=/usr/lib/at-spi \ + --disable-scrollkeeper + make +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/usr/share/gconf/schemas" + gconf-merge-schema "${pkgdir}/usr/share/gconf/schemas/${pkgname}.schemas" --domain gdm ${pkgdir}/etc/gconf/schemas/*.schemas + rm -r "${pkgdir}/etc/gconf/schemas/" + + install -m644 "${srcdir}/gdm.pam" "${pkgdir}/etc/pam.d/gdm" + install -m644 "${srcdir}/gdm-autologin.pam" "${pkgdir}/etc/pam.d/gdm-autologin" + + install -m755 -d "${pkgdir}/etc/rc.d" + install -m755 "${srcdir}/gdm" "${pkgdir}/etc/rc.d/" + + rmdir "${pkgdir}/var/gdm" + chmod 1770 "${pkgdir}/var/log/gdm" +} diff --git a/gnome-unstable/gdm/fix_crasher_with_gtk307.patch b/gnome-unstable/gdm/fix_crasher_with_gtk307.patch new file mode 100644 index 000000000..3b8379ea3 --- /dev/null +++ b/gnome-unstable/gdm/fix_crasher_with_gtk307.patch @@ -0,0 +1,104 @@ +From 045c319f2655fc45c24951479eb9cd1e59792cef Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <otte@redhat.com> +Date: Sat, 2 Apr 2011 04:10:09 +0200 +Subject: [PATCH] simple-greeter: Don't request an invalid size + +GTK widgets must at all times report a size they can handle. So it is +not allowed to return 0 when not realized, because then size allocations +break when GTK uses this size for its widget. +In this case, GTK uses the pre-realize size to determine the size it +should request when creating the greeter window - chicken and egg so to +say. + +This patch just uses the default monitor (I guess the root window's +monitor is the default monitor?) for determining the login window size. + +One thing this patch doesn't do is add a call to gtk_widget_queue_resize() +from the realize callback or from monitor-changing signals, though +that's probably technically necessary. + +https://bugzilla.gnome.org/show_bug.cgi?id=646498 +--- + gui/simple-greeter/gdm-greeter-login-window.c | 28 +++++++++---------------- + 1 files changed, 10 insertions(+), 18 deletions(-) + +diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c +index abd6707..3ec9a09 100644 +--- a/gui/simple-greeter/gdm-greeter-login-window.c ++++ b/gui/simple-greeter/gdm-greeter-login-window.c +@@ -1413,25 +1413,22 @@ gdm_greeter_login_window_get_preferred_width (GtkWidget *widget, + { + int monitor; + GdkScreen *screen; ++ GdkWindow *window; + GdkRectangle area; + GtkAllocation widget_allocation; + int min_size; + int nat_size; + +- min_size = 0; +- nat_size = 0; +- +- if (!gtk_widget_get_realized (widget)) { +- goto out; +- } +- + gtk_widget_get_preferred_width (gtk_bin_get_child (GTK_BIN (widget)), + &min_size, + &nat_size); + + /* Make width be at least 33% screen width */ + screen = gtk_widget_get_screen (widget); +- monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget)); ++ window = gtk_widget_get_window (widget); ++ if (window == NULL) ++ window = gdk_screen_get_root_window (screen); ++ monitor = gdk_screen_get_monitor_at_window (screen, window); + gdk_screen_get_monitor_geometry (screen, monitor, &area); + min_size = MAX (min_size, .33 * area.width); + nat_size = MAX (nat_size, .33 * area.width); +@@ -1442,7 +1439,6 @@ gdm_greeter_login_window_get_preferred_width (GtkWidget *widget, + min_size = MAX (min_size, widget_allocation.width); + nat_size = MAX (nat_size, widget_allocation.width); + +- out: + if (minimum_size) + *minimum_size = min_size; + if (natural_size) +@@ -1456,29 +1452,25 @@ gdm_greeter_login_window_get_preferred_height (GtkWidget *widget, + { + int monitor; + GdkScreen *screen; ++ GdkWindow *window; + GdkRectangle area; + int min_size; + int nat_size; + +- min_size = 0; +- nat_size = 0; +- +- if (!gtk_widget_get_realized (widget)) { +- goto out; +- } +- + gtk_widget_get_preferred_height (gtk_bin_get_child (GTK_BIN (widget)), + &min_size, + &nat_size); + + /* Make height be at most 80% of screen height */ + screen = gtk_widget_get_screen (widget); +- monitor = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget)); ++ window = gtk_widget_get_window (widget); ++ if (window == NULL) ++ window = gdk_screen_get_root_window (screen); ++ monitor = gdk_screen_get_monitor_at_window (screen, window); + gdk_screen_get_monitor_geometry (screen, monitor, &area); + min_size = MIN (min_size, .8 * area.height); + nat_size = MIN (nat_size, .8 * area.height); + +- out: + if (minimum_size) + *minimum_size = min_size; + if (natural_size) +-- +1.7.4
\ No newline at end of file diff --git a/gnome-unstable/gdm/gdm b/gnome-unstable/gdm/gdm new file mode 100755 index 000000000..c3e635a6d --- /dev/null +++ b/gnome-unstable/gdm/gdm @@ -0,0 +1,36 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions + +case "$1" in + start) + stat_busy "Starting GDM" + /usr/sbin/gdm & + if [ $? -gt 0 ]; then + stat_fail + else + + add_daemon gdm + stat_done + fi + ;; + stop) + stat_busy "Stopping GDM" + [ -f /var/run/gdm.pid ] && kill `cat /var/run/gdm.pid` &> /dev/null + if [ $? -gt 0 ]; then + stat_fail + else + rm_daemon gdm + stat_done + fi + ;; + restart) + $0 stop + sleep 2 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac +exit 0 diff --git a/gnome-unstable/gdm/gdm-autologin.pam b/gnome-unstable/gdm/gdm-autologin.pam new file mode 100644 index 000000000..7c2f9a985 --- /dev/null +++ b/gnome-unstable/gdm/gdm-autologin.pam @@ -0,0 +1,8 @@ +#%PAM-1.0 +auth requisite pam_nologin.so +auth required pam_env.so +auth required pam_permit.so +account required pam_unix.so +password required pam_unix.so +session required pam_limits.so +session required pam_unix.so diff --git a/gnome-unstable/gdm/gdm-vt-allocation-hack.patch b/gnome-unstable/gdm/gdm-vt-allocation-hack.patch new file mode 100644 index 000000000..56fa5a151 --- /dev/null +++ b/gnome-unstable/gdm/gdm-vt-allocation-hack.patch @@ -0,0 +1,118 @@ +diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c +index 39def47..03488fd 100644 +--- a/daemon/gdm-server.c ++++ b/daemon/gdm-server.c +@@ -33,6 +33,8 @@ + #include <grp.h> + #include <signal.h> + #include <sys/resource.h> ++#include <sys/ioctl.h> ++#include <sys/vt.h> + + #include <glib.h> + #include <glib/gi18n.h> +@@ -150,6 +152,92 @@ _gdm_server_query_ck_for_display_device (GdmServer *server) + return out; + } + ++#ifndef O_NOCTTY ++# define O_NOCTTY 0 ++#endif ++ ++static int ++open_vt (int vtno) ++{ ++ char *vtname; ++ int fd; ++ ++ vtname = g_strdup_printf ("/dev/tty%d", vtno); ++ ++ do { ++ errno = 0; ++ fd = open (vtname, O_RDWR | O_NOCTTY, 0); ++ } while (errno == EINTR); ++ ++ g_free (vtname); ++ return fd; ++} ++ ++static gint ++find_first_probably_free_vt (void) ++{ ++ int fd, fdv; ++ int vtno; ++ unsigned short vtmask; ++ struct vt_stat vtstat; ++ guint v_state; ++ ++ fdv = -1; ++ ++ do { ++ errno = 0; ++ fd = open ("/dev/console", O_WRONLY | O_NOCTTY, 0); ++ } while (errno == EINTR); ++ ++ if (fd >= 0) { ++ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0) { ++ v_state = vtstat.v_state; ++ } else { ++ close (fd); ++ v_state = 0; ++ fd = -1; ++ } ++ } else { ++ v_state = 0; ++ } ++ ++ if (fd < 0) { ++ do { ++ errno = 0; ++ fd = open ("/dev/console", O_RDONLY | O_NOCTTY, 0); ++ } while (errno == EINTR); ++ ++ if (fd >= 0) { ++ if (ioctl (fd, VT_GETSTATE, &vtstat) >= 0) ++ v_state = vtstat.v_state; ++ } ++ } ++ ++ for (vtno = 7, vtmask = 1 << vtno; vtmask; vtno++, vtmask <<= 1) { ++ /* Is this console in use? */ ++ if (v_state & vtmask) ++ continue; ++ ++ /* No, try to open it */ ++ fdv = open_vt (vtno); ++ if (fdv >= 0) ++ break; ++ ++ /* If we're here, kernel indicated that the console was free, ++ * but we failed to open it. Just go on to higher VTs. */ ++ } ++ ++ if (fdv >= 0) ++ close (fdv); ++ else ++ vtno = -1; ++ ++ if (fd >= 0) ++ close (fd); ++ ++ return vtno; ++} ++ + char * + gdm_server_get_display_device (GdmServer *server) + { +@@ -310,6 +398,11 @@ gdm_server_resolve_command_line (GdmServer *server, + + if (vtarg != NULL && ! gotvtarg) { + argv[len++] = g_strdup (vtarg); ++ } else if (!query_in_arglist && !gotvtarg) { ++ gint vtnum = find_first_probably_free_vt (); ++ ++ if (vtnum > 0) ++ argv [len++] = g_strdup_printf ("vt%d", vtnum); + } + + argv[len++] = NULL; diff --git a/gnome-unstable/gdm/gdm.install b/gnome-unstable/gdm/gdm.install new file mode 100644 index 000000000..c2b5e375e --- /dev/null +++ b/gnome-unstable/gdm/gdm.install @@ -0,0 +1,44 @@ +pkgname=gdm + +post_install() { + getent group gdm >/dev/null 2>&1 || groupadd -g 120 gdm + if getent passwd gdm > /dev/null 2>&1; then + usr/sbin/usermod -d /var/lib/gdm -c 'Gnome Display Manager' -s /sbin/nologin gdm > /dev/null 2>&1 + else + usr/sbin/useradd -c 'Gnome Display Manager' -u 120 -g gdm -d /var/lib/gdm -s /sbin/nologin gdm + fi + passwd -l gdm > /dev/null + chown gdm:gdm /var/lib/gdm > /dev/null + chown -R gdm:gdm /var/lib/gdm/.gconf.mandatory + + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor + gconfpkg --install ${pkgname} +} + +pre_upgrade() { + if [ -f opt/gnome/etc/gdm/custom.conf ]; then + mkdir -p etc/gdm + sed -e 's|/opt/gnome/libexec|usr/lib/gdm|g' \ + -e 's|/opt/gnome/etc|/etc|g' \ + -e 's|/opt/gnome/|/usr/|g' \ + opt/gnome/etc/gdm/custom.conf > etc/gdm/custom.conf + mv opt/gnome/etc/gdm/custom.conf opt/gnome/etc/gdm/custom.conf.pacsave + fi + pre_remove +} + +pre_remove() { + if [ -f usr/share/gconf/schemas/${pkgname}.schemas ]; then + gconfpkg --uninstall ${pkgname} + fi +} + +post_upgrade() { + post_install +} + +post_remove() { + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor + getent passwd gdm >/dev/null 2>&1 && userdel gdm + getent group gdm >/dev/null 2>&1 && groupdel gdm +} diff --git a/gnome-unstable/gdm/gdm.pam b/gnome-unstable/gdm/gdm.pam new file mode 100644 index 000000000..655299cb7 --- /dev/null +++ b/gnome-unstable/gdm/gdm.pam @@ -0,0 +1,10 @@ +#%PAM-1.0 +auth requisite pam_nologin.so +auth required pam_env.so +auth required pam_unix.so +auth optional pam_gnome_keyring.so +account required pam_unix.so +session required pam_limits.so +session required pam_unix.so +session optional pam_gnome_keyring.so auto_start +password required pam_unix.so |