Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 602597 Details for
Bug 846135
[PATCH] please update gdm to new display manager logic
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
patch for .spec file
0001-https-fedoraproject.org-wiki-Features-DisplayManager.patch (text/plain), 32.61 KB, created by
Lennart Poettering
on 2012-08-06 23:14:51 UTC
(
hide
)
Description:
patch for .spec file
Filename:
MIME Type:
Creator:
Lennart Poettering
Created:
2012-08-06 23:14:51 UTC
Size:
32.61 KB
patch
obsolete
>From 41efb30a1ff6ae5090e413580793c3b4254e4b1f Mon Sep 17 00:00:00 2001 >From: Lennart Poettering <lennart@poettering.net> >Date: Tue, 7 Aug 2012 01:13:11 +0200 >Subject: [PATCH] https://fedoraproject.org/wiki/Features/DisplayManagerRework > >--- > ...nstall-a-gdm.service-unit-file-by-default.patch | 99 +++ > 0002-gdm-always-run-gdm-on-VT1.patch | 666 +++++++++++++++++++++ > gdm.spec | 18 +- > 3 files changed, 782 insertions(+), 1 deletion(-) > create mode 100644 0001-systemd-install-a-gdm.service-unit-file-by-default.patch > create mode 100644 0002-gdm-always-run-gdm-on-VT1.patch > >diff --git a/0001-systemd-install-a-gdm.service-unit-file-by-default.patch b/0001-systemd-install-a-gdm.service-unit-file-by-default.patch >new file mode 100644 >index 0000000..a3a288f >--- /dev/null >+++ b/0001-systemd-install-a-gdm.service-unit-file-by-default.patch >@@ -0,0 +1,99 @@ >+From 808a2141954e949e2f2e3685f0d912b4f57324bb Mon Sep 17 00:00:00 2001 >+From: Lennart Poettering <lennart@poettering.net> >+Date: Mon, 6 Aug 2012 20:01:40 +0200 >+Subject: [PATCH 1/2] systemd: install a gdm.service unit file by default >+ >+https://fedoraproject.org/wiki/Features/DisplayManagerRework >+--- >+ Makefile.am | 7 ++++++- >+ configure.ac | 8 ++++++++ >+ data/.gitignore | 1 + >+ data/Makefile.am | 10 ++++++++++ >+ data/gdm.service.in | 13 +++++++++++++ >+ 5 files changed, 38 insertions(+), 1 deletion(-) >+ create mode 100644 data/.gitignore >+ create mode 100644 data/gdm.service.in >+ >+diff --git a/Makefile.am b/Makefile.am >+index c180854..3edacd9 100644 >+--- a/Makefile.am >++++ b/Makefile.am >+@@ -29,6 +29,11 @@ DISTCLEANFILES = \ >+ gnome-doc-utils.make \ >+ $(NULL) >+ >+-DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --enable-split-authentication --enable-introspection --enable-documentation >++DISTCHECK_CONFIGURE_FLAGS = \ >++ --disable-scrollkeeper \ >++ --enable-split-authentication \ >++ --enable-introspection \ >++ --enable-documentation \ >++ --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) >+ >+ distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper' >+diff --git a/configure.ac b/configure.ac >+index 7e962a6..132be24 100644 >+--- a/configure.ac >++++ b/configure.ac >+@@ -942,6 +942,14 @@ AC_PATH_PROG(SYSTEMD_X_SERVER, systemd-multi-seat-x, [/lib/systemd/systemd-multi >+ AC_SUBST(SYSTEMD_X_SERVER) >+ AC_DEFINE_UNQUOTED(SYSTEMD_X_SERVER,"$SYSTEMD_X_SERVER",[Path to systemd X server wrapper]) >+ >++AC_ARG_WITH([systemdsystemunitdir], >++ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), >++ [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]) >++if test "x$with_systemdsystemunitdir" != xno; then >++ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) >++fi >++AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ]) >++ >+ dnl --------------------------------------------------------------------------- >+ dnl - Check for plymouth support >+ dnl --------------------------------------------------------------------------- >+diff --git a/data/.gitignore b/data/.gitignore >+new file mode 100644 >+index 0000000..d9c62cb >+--- /dev/null >++++ b/data/.gitignore >+@@ -0,0 +1 @@ >++/gdm.service >+diff --git a/data/Makefile.am b/data/Makefile.am >+index ffbc768..e4f5718 100644 >+--- a/data/Makefile.am >++++ b/data/Makefile.am >+@@ -311,3 +311,13 @@ install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession 00-upstr >+ $(INSTALL_DATA) $(srcdir)/00-upstream-settings $(DESTDIR)$(sysconfdir)/dconf/db/gdm.d >+ $(INSTALL_DATA) $(srcdir)/00-upstream-settings-locks $(DESTDIR)$(sysconfdir)/dconf/db/gdm.d/locks >+ test -z "$(DESTDIR)" && dconf update || : >++ >++if HAVE_SYSTEMD >++systemdsystemunit_DATA = \ >++ gdm.service >++ >++gdm.service: $(srcdir)/gdm.service.in >++ $(AM_V_GEN)sed -e 's,[@]sbindir[@],$(sbindir),g' \ >++ < $< > $@ >++ >++endif >+diff --git a/data/gdm.service.in b/data/gdm.service.in >+new file mode 100644 >+index 0000000..8391cad >+--- /dev/null >++++ b/data/gdm.service.in >+@@ -0,0 +1,13 @@ >++[Unit] >++Description=GNOME Display Manager >++Conflicts=getty@tty1.service plymouth-quit.service >++After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service >++ >++[Service] >++ExecStart=@sbindir@/gdm >++Restart=always >++IgnoreSIGPIPE=no >++BusName=org.gnome.DisplayManager >++ >++[Install] >++Alias=display-manager.service >+-- >+1.7.11.2 >+ >diff --git a/0002-gdm-always-run-gdm-on-VT1.patch b/0002-gdm-always-run-gdm-on-VT1.patch >new file mode 100644 >index 0000000..c9b0385 >--- /dev/null >+++ b/0002-gdm-always-run-gdm-on-VT1.patch >@@ -0,0 +1,666 @@ >+From c4f7104145fafdd1b6e298a01941e1e84bdc8339 Mon Sep 17 00:00:00 2001 >+From: Lennart Poettering <lennart@poettering.net> >+Date: Mon, 6 Aug 2012 21:41:16 +0200 >+Subject: [PATCH 2/2] gdm: always run gdm on VT1 >+ >+This drops automatic VT allocation schemes for the initial display in >+favour of a compile time hardcoded VT assignment. The automatic >+allocation schemes are inherently racy since a simpler output to the >+console might already influence it and result in gdm running on another >+than the intended VT. >+ >+This patch adds a --with-initial-vt= switch to configure which may be >+used to set the VT gdm will run the initial server on. It defaults to 1. >+ >+https://fedoraproject.org/wiki/Features/DisplayManagerRework >+--- >+ configure.ac | 15 ++++++ >+ daemon/gdm-display.c | 52 +++++++++++++++++++ >+ daemon/gdm-display.h | 4 +- >+ daemon/gdm-display.xml | 3 ++ >+ daemon/gdm-local-display-factory.c | 19 ++++--- >+ daemon/gdm-server.c | 101 +++++++++++++------------------------ >+ daemon/gdm-server.h | 6 +-- >+ daemon/gdm-simple-slave.c | 11 ++-- >+ daemon/gdm-slave.c | 35 ++++++++++++- >+ data/Makefile.am | 4 +- >+ data/gdm.service.in | 4 +- >+ 11 files changed, 165 insertions(+), 89 deletions(-) >+ >+diff --git a/configure.ac b/configure.ac >+index 132be24..7abdc37 100644 >+--- a/configure.ac >++++ b/configure.ac >+@@ -1447,6 +1447,20 @@ else >+ XSESSION_SHELL=/bin/sh >+ fi >+ >++# >++# Set VT to use for initial server >++# >++AC_ARG_WITH(initial-vt, >++ AS_HELP_STRING([--with-initial-vt=<nr>], >++ [Initial virtual terminal to use])) >++if ! test -z "$with_initial_vt"; then >++ GDM_INITIAL_VT="$with_initial_vt" >++else >++ GDM_INITIAL_VT="1" >++fi >++AC_SUBST(GDM_INITIAL_VT) >++AC_DEFINE_UNQUOTED(GDM_INITIAL_VT, "$GDM_INITIAL_VT", [Initial Virtual Terminal]) >++ >+ # Set configuration choices. >+ # >+ AC_SUBST(XSESSION_SHELL) >+@@ -1566,4 +1580,5 @@ echo \ >+ plymouth support: ${use_plymouth} >+ UPower support: ${have_upower} >+ Build with RBAC: ${msg_rbac_shutdown} >++ Initial VT: ${GDM_INITIAL_VT} >+ " >+diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c >+index 25fff69..f0307a9 100644 >+--- a/daemon/gdm-display.c >++++ b/daemon/gdm-display.c >+@@ -79,6 +79,8 @@ struct GdmDisplayPrivate >+ >+ GdmDBusDisplay *display_skeleton; >+ GDBusObjectSkeleton *object_skeleton; >++ >++ gboolean is_initial; >+ }; >+ >+ enum { >+@@ -94,6 +96,7 @@ enum { >+ PROP_X11_AUTHORITY_FILE, >+ PROP_IS_LOCAL, >+ PROP_SLAVE_COMMAND, >++ PROP_IS_INITIAL >+ }; >+ >+ static void gdm_display_class_init (GdmDisplayClass *klass); >+@@ -535,6 +538,19 @@ gdm_display_get_seat_id (GdmDisplay *display, >+ return TRUE; >+ } >+ >++gboolean gdm_display_is_initial (GdmDisplay *display, >++ gboolean *is_initial, >++ GError **error) >++{ >++ g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); >++ >++ if (is_initial != NULL) { >++ *is_initial = display->priv->is_initial; >++ } >++ >++ return TRUE; >++} >++ >+ static gboolean >+ finish_idle (GdmDisplay *display) >+ { >+@@ -886,6 +902,13 @@ _gdm_display_set_slave_command (GdmDisplay *display, >+ } >+ >+ static void >++_gdm_display_set_is_initial (GdmDisplay *display, >++ gboolean initial) >++{ >++ display->priv->is_initial = initial; >++} >++ >++static void >+ gdm_display_set_property (GObject *object, >+ guint prop_id, >+ const GValue *value, >+@@ -926,6 +949,9 @@ gdm_display_set_property (GObject *object, >+ case PROP_SLAVE_COMMAND: >+ _gdm_display_set_slave_command (self, g_value_get_string (value)); >+ break; >++ case PROP_IS_INITIAL: >++ _gdm_display_set_is_initial (self, g_value_get_boolean (value)); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -977,6 +1003,9 @@ gdm_display_get_property (GObject *object, >+ case PROP_SLAVE_COMMAND: >+ g_value_set_string (value, self->priv->slave_command); >+ break; >++ case PROP_IS_INITIAL: >++ g_value_set_boolean (value, self->priv->is_initial); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -1129,6 +1158,20 @@ handle_is_local (GdmDBusDisplay *skeleton, >+ } >+ >+ static gboolean >++handle_is_initial (GdmDBusDisplay *skeleton, >++ GDBusMethodInvocation *invocation, >++ GdmDisplay *display) >++{ >++ gboolean is_initial = FALSE; >++ >++ gdm_display_is_initial (display, &is_initial, NULL); >++ >++ gdm_dbus_display_complete_is_initial (skeleton, invocation, is_initial); >++ >++ return TRUE; >++} >++ >++static gboolean >+ handle_get_slave_bus_name (GdmDBusDisplay *skeleton, >+ GDBusMethodInvocation *invocation, >+ GdmDisplay *display) >+@@ -1237,6 +1280,8 @@ register_display (GdmDisplay *display) >+ G_CALLBACK (handle_get_x11_display_number), display); >+ g_signal_connect (display->priv->display_skeleton, "handle-is-local", >+ G_CALLBACK (handle_is_local), display); >++ g_signal_connect (display->priv->display_skeleton, "handle-is-initial", >++ G_CALLBACK (handle_is_initial), display); >+ g_signal_connect (display->priv->display_skeleton, "handle-get-slave-bus-name", >+ G_CALLBACK (handle_get_slave_bus_name), display); >+ g_signal_connect (display->priv->display_skeleton, "handle-set-slave-bus-name", >+@@ -1461,6 +1506,13 @@ gdm_display_class_init (GdmDisplayClass *klass) >+ NULL, >+ G_PARAM_READWRITE)); >+ g_object_class_install_property (object_class, >++ PROP_IS_INITIAL, >++ g_param_spec_boolean ("is-initial", >++ NULL, >++ NULL, >++ FALSE, >++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); >++ g_object_class_install_property (object_class, >+ PROP_X11_COOKIE, >+ g_param_spec_string ("x11-cookie", >+ "cookie", >+diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h >+index 5050eec..e750ffa 100644 >+--- a/daemon/gdm-display.h >++++ b/daemon/gdm-display.h >+@@ -136,6 +136,9 @@ gboolean gdm_display_get_timed_login_details (GdmDisplay *disp >+ char **username, >+ int *delay, >+ GError **error); >++gboolean gdm_display_is_initial (GdmDisplay *display, >++ gboolean *initial, >++ GError **error); >+ >+ /* exported but protected */ >+ gboolean gdm_display_get_x11_cookie (GdmDisplay *display, >+@@ -155,7 +158,6 @@ gboolean gdm_display_set_slave_bus_name (GdmDisplay *disp >+ const char *name, >+ GError **error); >+ >+- >+ G_END_DECLS >+ >+ #endif /* __GDM_DISPLAY_H */ >+diff --git a/daemon/gdm-display.xml b/daemon/gdm-display.xml >+index 13c734d..904e0ae 100644 >+--- a/daemon/gdm-display.xml >++++ b/daemon/gdm-display.xml >+@@ -19,6 +19,9 @@ >+ <method name="GetSeatId"> >+ <arg name="filename" direction="out" type="s"/> >+ </method> >++ <method name="IsInitial"> >++ <arg name="initial" direction="out" type="b"/> >++ </method> >+ <method name="GetRemoteHostname"> >+ <arg name="hostname" direction="out" type="s"/> >+ </method> >+diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c >+index bef2209..571c9fd 100644 >+--- a/daemon/gdm-local-display-factory.c >++++ b/daemon/gdm-local-display-factory.c >+@@ -76,7 +76,8 @@ static void gdm_local_display_factory_init (GdmLocalDisplayFactory >+ static void gdm_local_display_factory_finalize (GObject *object); >+ >+ static GdmDisplay *create_display (GdmLocalDisplayFactory *factory, >+- const char *seat_id); >++ const char *seat_id, >++ gboolean initial_display); >+ >+ static void on_display_status_changed (GdmDisplay *display, >+ GParamSpec *arg1, >+@@ -271,6 +272,7 @@ on_display_status_changed (GdmDisplay *display, >+ GdmDisplayStore *store; >+ int num; >+ char *seat_id = NULL; >++ gboolean is_initial = TRUE; >+ >+ num = -1; >+ gdm_display_get_x11_display_number (display, &num, NULL); >+@@ -279,6 +281,7 @@ on_display_status_changed (GdmDisplay *display, >+ store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory)); >+ >+ g_object_get (display, "seat-id", &seat_id, NULL); >++ g_object_get (display, "is-initial", &is_initial, NULL); >+ >+ status = gdm_display_get_status (display); >+ >+@@ -295,7 +298,7 @@ on_display_status_changed (GdmDisplay *display, >+ /* reset num failures */ >+ factory->priv->num_failures = 0; >+ >+- create_display (factory, seat_id); >++ create_display (factory, seat_id, is_initial); >+ } >+ break; >+ case GDM_DISPLAY_FAILED: >+@@ -314,7 +317,7 @@ on_display_status_changed (GdmDisplay *display, >+ /* FIXME: should monitor hardware changes to >+ try again when seats change */ >+ } else { >+- create_display (factory, seat_id); >++ create_display (factory, seat_id, is_initial); >+ } >+ } >+ break; >+@@ -352,7 +355,8 @@ lookup_by_seat_id (const char *id, >+ >+ static GdmDisplay * >+ create_display (GdmLocalDisplayFactory *factory, >+- const char *seat_id) >++ const char *seat_id, >++ gboolean initial) >+ { >+ GdmDisplayStore *store; >+ GdmDisplay *display; >+@@ -372,6 +376,7 @@ create_display (GdmLocalDisplayFactory *factory, >+ display = gdm_static_display_new (num); >+ >+ g_object_set (display, "seat-id", seat_id, NULL); >++ g_object_set (display, "is-initial", initial, NULL); >+ >+ store_display (factory, num, display); >+ >+@@ -428,7 +433,7 @@ static gboolean gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *fa >+ g_variant_iter_init (&iter, array); >+ >+ while (g_variant_iter_loop (&iter, "(&so)", &seat, NULL)) >+- create_display (factory, seat); >++ create_display (factory, seat, TRUE); >+ >+ g_variant_unref (result); >+ g_variant_unref (array); >+@@ -447,7 +452,7 @@ on_seat_new (GDBusConnection *connection, >+ const char *seat; >+ >+ g_variant_get (parameters, "(&s)", &seat); >+- create_display (GDM_LOCAL_DISPLAY_FACTORY (user_data), seat); >++ create_display (GDM_LOCAL_DISPLAY_FACTORY (user_data), seat, FALSE); >+ } >+ >+ static void >+@@ -523,7 +528,7 @@ gdm_local_display_factory_start (GdmDisplayFactory *base_factory) >+ #endif >+ >+ /* On ConsoleKit just create Seat1, and that's it. */ >+- display = create_display (factory, CK_SEAT1_PATH); >++ display = create_display (factory, CK_SEAT1_PATH, TRUE); >+ >+ return display != NULL; >+ } >+diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c >+index edbb3d4..8aac7d7 100644 >+--- a/daemon/gdm-server.c >++++ b/daemon/gdm-server.c >+@@ -97,6 +97,8 @@ struct GdmServerPrivate >+ char *chosen_hostname; >+ >+ guint child_watch_id; >++ >++ gboolean is_initial; >+ }; >+ >+ enum { >+@@ -115,6 +117,7 @@ enum { >+ PROP_SESSION_ARGS, >+ PROP_LOG_DIR, >+ PROP_DISABLE_TCP, >++ PROP_IS_INITIAL, >+ }; >+ >+ enum { >+@@ -757,70 +760,6 @@ gdm_server_spawn (GdmServer *server, >+ return ret; >+ } >+ >+-#ifdef WITH_PLYMOUTH >+-static int >+-get_active_vt (void) >+-{ >+- int console_fd; >+- struct vt_stat console_state = { 0 }; >+- >+- console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY); >+- >+- if (console_fd < 0) { >+- goto out; >+- } >+- >+- if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) { >+- goto out; >+- } >+- >+-out: >+- if (console_fd >= 0) { >+- close (console_fd); >+- } >+- >+- return console_state.v_active; >+-} >+- >+-static char * >+-get_active_vt_as_string (void) >+-{ >+- int vt; >+- >+- vt = get_active_vt (); >+- >+- if (vt <= 0) { >+- return NULL; >+- } >+- >+- return g_strdup_printf ("vt%d", vt); >+-} >+- >+-gboolean >+-gdm_server_start_on_active_vt (GdmServer *server) >+-{ >+- gboolean res; >+- gboolean debug; >+- char *vt; >+- const char *debug_options; >+- >+- gdm_settings_direct_get_boolean (GDM_KEY_DEBUG, &debug); >+- if (debug) { >+- debug_options = " -logverbose 7 -core "; >+- } else { >+- debug_options = ""; >+- } >+- >+- g_free (server->priv->command); >+- server->priv->command = g_strdup_printf (X_SERVER " -background none -verbose%s", debug_options); >+- vt = get_active_vt_as_string (); >+- res = gdm_server_spawn (server, vt); >+- g_free (vt); >+- >+- return res; >+-} >+-#endif >+- >+ /** >+ * gdm_server_start: >+ * @disp: Pointer to a GdmDisplay structure >+@@ -832,9 +771,16 @@ gboolean >+ gdm_server_start (GdmServer *server) >+ { >+ gboolean res; >++ const char *vtarg = NULL; >++ >++ /* Hardcode the VT for the initial X server, but nothing else */ >++ if (server->priv->is_initial && >++ (server->priv->display_seat_id == NULL || >++ strcmp (server->priv->display_seat_id, "seat0") == 0)) >++ vtarg = "vt" GDM_INITIAL_VT; >+ >+ /* fork X server process */ >+- res = gdm_server_spawn (server, NULL); >++ res = gdm_server_spawn (server, vtarg); >+ >+ return res; >+ } >+@@ -932,6 +878,13 @@ _gdm_server_set_disable_tcp (GdmServer *server, >+ } >+ >+ static void >++_gdm_server_set_is_initial (GdmServer *server, >++ gboolean initial) >++{ >++ server->priv->is_initial = initial; >++} >++ >++static void >+ gdm_server_set_property (GObject *object, >+ guint prop_id, >+ const GValue *value, >+@@ -957,6 +910,9 @@ gdm_server_set_property (GObject *object, >+ case PROP_DISABLE_TCP: >+ _gdm_server_set_disable_tcp (self, g_value_get_boolean (value)); >+ break; >++ case PROP_IS_INITIAL: >++ _gdm_server_set_is_initial (self, g_value_get_boolean (value)); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -993,6 +949,9 @@ gdm_server_get_property (GObject *object, >+ case PROP_DISABLE_TCP: >+ g_value_set_boolean (value, self->priv->disable_tcp); >+ break; >++ case PROP_IS_INITIAL: >++ g_value_set_boolean (value, self->priv->is_initial); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -1086,7 +1045,13 @@ gdm_server_class_init (GdmServerClass *klass) >+ NULL, >+ TRUE, >+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); >+- >++ g_object_class_install_property (object_class, >++ PROP_IS_INITIAL, >++ g_param_spec_boolean ("is-initial", >++ NULL, >++ NULL, >++ FALSE, >++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); >+ } >+ >+ static void >+@@ -1136,7 +1101,8 @@ gdm_server_finalize (GObject *object) >+ GdmServer * >+ gdm_server_new (const char *display_name, >+ const char *seat_id, >+- const char *auth_file) >++ const char *auth_file, >++ gboolean initial) >+ { >+ GObject *object; >+ >+@@ -1144,6 +1110,7 @@ gdm_server_new (const char *display_name, >+ "display-name", display_name, >+ "display-seat-id", seat_id, >+ "auth-file", auth_file, >++ "is-initial", initial, >+ NULL); >+ >+ return GDM_SERVER (object); >+diff --git a/daemon/gdm-server.h b/daemon/gdm-server.h >+index 56e2025..e427f82 100644 >+--- a/daemon/gdm-server.h >++++ b/daemon/gdm-server.h >+@@ -55,11 +55,9 @@ typedef struct >+ GType gdm_server_get_type (void); >+ GdmServer * gdm_server_new (const char *display_id, >+ const char *seat_id, >+- const char *auth_file); >++ const char *auth_file, >++ gboolean initial); >+ gboolean gdm_server_start (GdmServer *server); >+-#ifdef WITH_PLYMOUTH >+-gboolean gdm_server_start_on_active_vt (GdmServer *server); >+-#endif >+ gboolean gdm_server_stop (GdmServer *server); >+ char * gdm_server_get_display_device (GdmServer *server); >+ >+diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c >+index f0f27b4..137d238 100644 >+--- a/daemon/gdm-simple-slave.c >++++ b/daemon/gdm-simple-slave.c >+@@ -1311,12 +1311,14 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) >+ char *auth_file; >+ char *seat_id; >+ gboolean display_is_local; >++ gboolean display_is_initial; >+ >+ g_object_get (slave, >+ "display-is-local", &display_is_local, >+ "display-name", &display_name, >+ "display-seat-id", &seat_id, >+ "display-x11-authority-file", &auth_file, >++ "display-is-initial", &display_is_initial, >+ NULL); >+ >+ /* if this is local display start a server if one doesn't >+@@ -1325,7 +1327,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) >+ gboolean res; >+ gboolean disable_tcp; >+ >+- slave->priv->server = gdm_server_new (display_name, seat_id, auth_file); >++ slave->priv->server = gdm_server_new (display_name, seat_id, auth_file, display_is_initial); >+ >+ disable_tcp = TRUE; >+ if (gdm_settings_client_get_boolean (GDM_KEY_DISALLOW_TCP, >+@@ -1353,12 +1355,9 @@ gdm_simple_slave_run (GdmSimpleSlave *slave) >+ >+ if (slave->priv->plymouth_is_running) { >+ plymouth_prepare_for_transition (slave); >+- res = gdm_server_start_on_active_vt (slave->priv->server); >+- } else >+-#endif >+- { >+- res = gdm_server_start (slave->priv->server); >+ } >++#endif >++ res = gdm_server_start (slave->priv->server); >+ if (! res) { >+ g_warning (_("Could not start the X " >+ "server (your graphical environment) " >+diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c >+index 94c369c..1dd7394 100644 >+--- a/daemon/gdm-slave.c >++++ b/daemon/gdm-slave.c >+@@ -103,6 +103,7 @@ struct GdmSlavePrivate >+ char *parent_display_x11_authority_file; >+ char *windowpath; >+ char *display_x11_cookie; >++ gboolean display_is_initial; >+ >+ GdmDBusDisplay *display_proxy; >+ GDBusConnection *connection; >+@@ -118,7 +119,8 @@ enum { >+ PROP_DISPLAY_HOSTNAME, >+ PROP_DISPLAY_IS_LOCAL, >+ PROP_DISPLAY_SEAT_ID, >+- PROP_DISPLAY_X11_AUTHORITY_FILE >++ PROP_DISPLAY_X11_AUTHORITY_FILE, >++ PROP_DISPLAY_IS_INITIAL, >+ }; >+ >+ enum { >+@@ -895,6 +897,17 @@ gdm_slave_real_start (GdmSlave *slave) >+ return FALSE; >+ } >+ >++ error = NULL; >++ res = gdm_dbus_display_call_is_initial_sync (slave->priv->display_proxy, >++ &slave->priv->display_is_initial, >++ NULL, >++ &error); >++ if (! res) { >++ g_warning ("Failed to get value: %s", error->message); >++ g_error_free (error); >++ return FALSE; >++ } >++ >+ return TRUE; >+ } >+ >+@@ -1787,6 +1800,13 @@ _gdm_slave_set_display_is_local (GdmSlave *slave, >+ } >+ >+ static void >++_gdm_slave_set_display_is_initial (GdmSlave *slave, >++ gboolean is) >++{ >++ slave->priv->display_is_initial = is; >++} >++ >++static void >+ gdm_slave_set_property (GObject *object, >+ guint prop_id, >+ const GValue *value, >+@@ -1821,6 +1841,9 @@ gdm_slave_set_property (GObject *object, >+ case PROP_DISPLAY_IS_LOCAL: >+ _gdm_slave_set_display_is_local (self, g_value_get_boolean (value)); >+ break; >++ case PROP_DISPLAY_IS_INITIAL: >++ _gdm_slave_set_display_is_initial (self, g_value_get_boolean (value)); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -1862,6 +1885,9 @@ gdm_slave_get_property (GObject *object, >+ case PROP_DISPLAY_IS_LOCAL: >+ g_value_set_boolean (value, self->priv->display_is_local); >+ break; >++ case PROP_DISPLAY_IS_INITIAL: >++ g_value_set_boolean (value, self->priv->display_is_initial); >++ break; >+ default: >+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); >+ break; >+@@ -2094,6 +2120,13 @@ gdm_slave_class_init (GdmSlaveClass *klass) >+ "display is local", >+ TRUE, >+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); >++ g_object_class_install_property (object_class, >++ PROP_DISPLAY_IS_INITIAL, >++ g_param_spec_boolean ("display-is-initial", >++ NULL, >++ NULL, >++ FALSE, >++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); >+ >+ signals [STOPPED] = >+ g_signal_new ("stopped", >+diff --git a/data/Makefile.am b/data/Makefile.am >+index e4f5718..86f166e 100644 >+--- a/data/Makefile.am >++++ b/data/Makefile.am >+@@ -317,7 +317,9 @@ systemdsystemunit_DATA = \ >+ gdm.service >+ >+ gdm.service: $(srcdir)/gdm.service.in >+- $(AM_V_GEN)sed -e 's,[@]sbindir[@],$(sbindir),g' \ >++ $(AM_V_GEN)sed \ >++ -e 's,[@]sbindir[@],$(sbindir),g' \ >++ -e 's,[@]GDM_INITIAL_VT[@],$(GDM_INITIAL_VT),g' \ >+ < $< > $@ >+ >+ endif >+diff --git a/data/gdm.service.in b/data/gdm.service.in >+index 8391cad..c15a415 100644 >+--- a/data/gdm.service.in >++++ b/data/gdm.service.in >+@@ -1,7 +1,7 @@ >+ [Unit] >+ Description=GNOME Display Manager >+-Conflicts=getty@tty1.service plymouth-quit.service >+-After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service >++Conflicts=getty@tty@GDM_INITIAL_VT@.service plymouth-quit.service >++After=systemd-user-sessions.service getty@tty@GDM_INITIAL_VT@.service plymouth-quit.service >+ >+ [Service] >+ ExecStart=@sbindir@/gdm >+-- >+1.7.11.2 >+ >diff --git a/gdm.spec b/gdm.spec >index 44066e5..9c5c90f 100644 >--- a/gdm.spec >+++ b/gdm.spec >@@ -14,7 +14,7 @@ > Summary: The GNOME Display Manager > Name: gdm > Version: 3.5.4.2 >-Release: 2%{?dist} >+Release: 3%{?dist} > Epoch: 1 > License: GPLv2+ > Group: User Interface/X >@@ -22,6 +22,8 @@ URL: http://download.gnome.org/sources/gdm > #VCS: git:git://git.gnome.org/gdm > Source: http://download.gnome.org/sources/gdm/3.4/gdm-%{version}.tar.xz > Source1: org.gnome.login-screen.gschema.override >+Patch1: 0001-systemd-install-a-gdm.service-unit-file-by-default.patch >+Patch2: 0002-gdm-always-run-gdm-on-VT1.patch > > Requires(pre): /usr/sbin/useradd > >@@ -77,6 +79,7 @@ BuildRequires: pkgconfig(accountsservice) >= 0.6.3 > BuildRequires: pkgconfig(libsystemd-login) > BuildRequires: pkgconfig(libsystemd-daemon) > BuildRequires: pkgconfig(ply-boot-client) >+BuildRequires: systemd > > # these are all just for rewriting gdm.d/00-upstream-settings > Requires(posttrans): dconf >@@ -120,6 +123,9 @@ Development files and headers for writing GDM greeters. > %prep > %setup -q > >+%patch1 -p1 >+%patch2 -p1 >+ > autoreconf -i -f > > %build >@@ -235,8 +241,11 @@ if [ $1 -ge 2 -a -f $custom ] && grep -q /etc/X11/gdm $custom ; then > sed -i -e 's@/etc/X11/gdm@/etc/gdm@g' $custom > fi > >+%systemd_post gdm.service >+ > %preun > %gconf_schema_remove gdm-simple-greeter >+%systemd_preun gdm.service > > %postun > /sbin/ldconfig >@@ -248,6 +257,7 @@ fi > if [ $1 -eq 0 ] ; then > /usr/bin/glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || : > fi >+%systemd_postun > > %posttrans > dconf update >@@ -330,6 +340,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : > %dir %{_datadir}/gdm/simple-greeter/extensions/fingerprint > %{_datadir}/gdm/simple-greeter/extensions/fingerprint/page.ui > %{_libdir}/gdm/simple-greeter/extensions/libfingerprint.so >+%{_unitdir}/gdm.service > > %files devel > %dir %{_includedir}/gdm >@@ -344,6 +355,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || : > %{_libdir}/girepository-1.0/Gdm-1.0.typelib > > %changelog >+* Mon Aug 6 2012 Lennart Poettering <lpoetter@redhat.com> - 1:3.5.4.2-3 >+- https://fedoraproject.org/wiki/Features/DisplayManagerRework >+- Ship and use gdm.service >+- Force gdm onto VT1 >+ > * Fri Jul 27 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.5.4.2-2 > - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild > >-- >1.7.11.2 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 846135
:
602597
|
602733
|
602734