actually quit plymouth at startup
This commit is contained in:
parent
0497b5868d
commit
ad6daf364e
8
gdm.spec
8
gdm.spec
@ -11,7 +11,7 @@
|
|||||||
Summary: The GNOME Display Manager
|
Summary: The GNOME Display Manager
|
||||||
Name: gdm
|
Name: gdm
|
||||||
Version: 3.16.0
|
Version: 3.16.0
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Group: User Interface/X
|
Group: User Interface/X
|
||||||
@ -79,6 +79,8 @@ Requires: system-logos
|
|||||||
Requires: xorg-x11-server-utils
|
Requires: xorg-x11-server-utils
|
||||||
Requires: xorg-x11-xinit
|
Requires: xorg-x11-xinit
|
||||||
|
|
||||||
|
Patch0: quit-plymouth.patch
|
||||||
|
|
||||||
Obsoletes: gdm-libs < 1:3.12.0-3
|
Obsoletes: gdm-libs < 1:3.12.0-3
|
||||||
Provides: gdm-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
Provides: gdm-libs%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
|
|
||||||
@ -104,6 +106,7 @@ files needed to build custom greeters.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
%patch0 -p1 -b .quit-plymouth
|
||||||
|
|
||||||
autoreconf -i -f
|
autoreconf -i -f
|
||||||
intltoolize -f
|
intltoolize -f
|
||||||
@ -294,6 +297,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/null || :
|
|||||||
%{_libdir}/pkgconfig/gdm.pc
|
%{_libdir}/pkgconfig/gdm.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Mar 24 2015 Ray Strode <rstrode@redhat.com> 3.16.0-2
|
||||||
|
- actually quit plymouth at startup
|
||||||
|
|
||||||
* Mon Mar 23 2015 Kalev Lember <kalevlember@gmail.com> - 1:3.16.0-1
|
* Mon Mar 23 2015 Kalev Lember <kalevlember@gmail.com> - 1:3.16.0-1
|
||||||
- Update to 3.16.0
|
- Update to 3.16.0
|
||||||
|
|
||||||
|
391
quit-plymouth.patch
Normal file
391
quit-plymouth.patch
Normal file
@ -0,0 +1,391 @@
|
|||||||
|
From c46f1f6798088c4d0ebc809fe200e2fee50d69f6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Mon, 23 Mar 2015 08:46:40 -0400
|
||||||
|
Subject: [PATCH 1/2] Revert "manager: add hack to quit plymouth after a delay"
|
||||||
|
|
||||||
|
This reverts commit 862ba1bd67ec85b5784d3e8809a405f1845b1c43.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=746498
|
||||||
|
---
|
||||||
|
daemon/gdm-manager.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
||||||
|
index e9ed29d..8c36e06 100644
|
||||||
|
--- a/daemon/gdm-manager.c
|
||||||
|
+++ b/daemon/gdm-manager.c
|
||||||
|
@@ -162,61 +162,61 @@ plymouth_is_running (void)
|
||||||
|
g_debug ("Could not ping plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return WIFEXITED (status) && WEXITSTATUS (status) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plymouth_prepare_for_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
|
||||||
|
NULL, NULL, NULL, &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not deactivate plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plymouth_quit_with_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
- res = g_spawn_command_line_async ("sleep 2; /bin/plymouth quit --retain-splash", &error);
|
||||||
|
+ res = g_spawn_command_line_async ("/bin/plymouth quit --retain-splash", &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not quit plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plymouth_quit_without_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_async ("/bin/plymouth quit", &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not quit plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_SYSTEMD
|
||||||
|
static char *
|
||||||
|
get_session_id_for_pid_systemd (pid_t pid,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
char *session, *gsession;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
session = NULL;
|
||||||
|
--
|
||||||
|
2.3.3
|
||||||
|
|
||||||
|
|
||||||
|
From 2cbd7ad1f66d0a757c1d2217705436aa1beca76a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Thu, 19 Mar 2015 22:38:15 -0400
|
||||||
|
Subject: [PATCH 2/2] manager: add a different hack to quit plymouth later
|
||||||
|
|
||||||
|
Right now wayland sessions register with GDM before they're
|
||||||
|
actually ready, so we quit plymouth too soon.
|
||||||
|
|
||||||
|
Until we can fix that, this commit quits plymouth when the login screen
|
||||||
|
connects to the daemon, or in the event of automatic login (where there
|
||||||
|
is no login screen), after 20 seconds.
|
||||||
|
|
||||||
|
This is like commit 862ba1bd67ec85b5784d3e8809a405f1845b1c43
|
||||||
|
but hopefully less broken..
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=746498
|
||||||
|
---
|
||||||
|
daemon/gdm-manager.c | 26 +++++++++++++++++++-------
|
||||||
|
1 file changed, 19 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
|
||||||
|
index 8c36e06..7b2cf65 100644
|
||||||
|
--- a/daemon/gdm-manager.c
|
||||||
|
+++ b/daemon/gdm-manager.c
|
||||||
|
@@ -155,72 +155,74 @@ plymouth_is_running (void)
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_sync ("/bin/plymouth --ping",
|
||||||
|
NULL, NULL, &status, &error);
|
||||||
|
if (! res) {
|
||||||
|
g_debug ("Could not ping plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return WIFEXITED (status) && WEXITSTATUS (status) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plymouth_prepare_for_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
|
||||||
|
NULL, NULL, NULL, &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not deactivate plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
+static gboolean
|
||||||
|
plymouth_quit_with_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_async ("/bin/plymouth quit --retain-splash", &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not quit plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
plymouth_quit_without_transition (void)
|
||||||
|
{
|
||||||
|
gboolean res;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
res = g_spawn_command_line_async ("/bin/plymouth quit", &error);
|
||||||
|
if (! res) {
|
||||||
|
g_warning ("Could not quit plymouth: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_SYSTEMD
|
||||||
|
static char *
|
||||||
|
get_session_id_for_pid_systemd (pid_t pid,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
char *session, *gsession;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
session = NULL;
|
||||||
|
ret = sd_pid_get_session (pid, &session);
|
||||||
|
if (ret < 0) {
|
||||||
|
g_set_error (error,
|
||||||
|
GDM_DISPLAY_ERROR,
|
||||||
|
@@ -1707,66 +1709,60 @@ on_display_status_changed (GdmDisplay *display,
|
||||||
|
NULL);
|
||||||
|
quit_plymouth = display_is_local && manager->priv->plymouth_is_running;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
status = gdm_display_get_status (display);
|
||||||
|
|
||||||
|
switch (status) {
|
||||||
|
case GDM_DISPLAY_PREPARED:
|
||||||
|
case GDM_DISPLAY_MANAGED:
|
||||||
|
if ((display_number == -1 && status == GDM_DISPLAY_PREPARED) ||
|
||||||
|
(display_number != -1 && status == GDM_DISPLAY_MANAGED)) {
|
||||||
|
char *session_class;
|
||||||
|
|
||||||
|
g_object_get (display,
|
||||||
|
"session-class", &session_class,
|
||||||
|
NULL);
|
||||||
|
if (g_strcmp0 (session_class, "greeter") == 0) {
|
||||||
|
gboolean will_autologin;
|
||||||
|
|
||||||
|
will_autologin = display_should_autologin (manager, display);
|
||||||
|
|
||||||
|
if (will_autologin) {
|
||||||
|
set_up_automatic_login_session (manager, display);
|
||||||
|
} else {
|
||||||
|
set_up_greeter_session (manager, display);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == GDM_DISPLAY_MANAGED) {
|
||||||
|
-#ifdef WITH_PLYMOUTH
|
||||||
|
- if (quit_plymouth) {
|
||||||
|
- plymouth_quit_with_transition ();
|
||||||
|
- manager->priv->plymouth_is_running = FALSE;
|
||||||
|
- }
|
||||||
|
-#endif
|
||||||
|
greeter_display_started (manager, display);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GDM_DISPLAY_FAILED:
|
||||||
|
case GDM_DISPLAY_UNMANAGED:
|
||||||
|
case GDM_DISPLAY_FINISHED:
|
||||||
|
#ifdef WITH_PLYMOUTH
|
||||||
|
if (quit_plymouth) {
|
||||||
|
plymouth_quit_without_transition ();
|
||||||
|
manager->priv->plymouth_is_running = FALSE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
maybe_start_pending_initial_login (manager, display);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_display_removed (GdmDisplayStore *display_store,
|
||||||
|
const char *id,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
GdmDisplay *display;
|
||||||
|
|
||||||
|
display = gdm_display_store_lookup (display_store, id);
|
||||||
|
if (display != NULL) {
|
||||||
|
@@ -1972,60 +1968,69 @@ on_session_authentication_failed (GdmSession *session,
|
||||||
|
{
|
||||||
|
add_session_record (manager, session, conversation_pid, SESSION_RECORD_FAILED);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_user_session_opened (GdmSession *session,
|
||||||
|
const char *service_name,
|
||||||
|
const char *session_id,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
manager->priv->user_sessions = g_list_append (manager->priv->user_sessions,
|
||||||
|
g_object_ref (session));
|
||||||
|
if (g_strcmp0 (service_name, "gdm-autologin") == 0 &&
|
||||||
|
!gdm_session_client_is_connected (session)) {
|
||||||
|
/* If we're auto logging in then don't wait for the go-ahead from a greeter,
|
||||||
|
* (since there is no greeter) */
|
||||||
|
g_object_set_data (G_OBJECT (session), "start-when-ready", GINT_TO_POINTER (TRUE));
|
||||||
|
}
|
||||||
|
|
||||||
|
start_user_session_if_ready (manager, session, service_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_user_session_started (GdmSession *session,
|
||||||
|
const char *service_name,
|
||||||
|
GPid pid,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
g_debug ("GdmManager: session started %d", pid);
|
||||||
|
add_session_record (manager, session, pid, SESSION_RECORD_LOGIN);
|
||||||
|
+
|
||||||
|
+#ifdef WITH_PLYMOUTH
|
||||||
|
+ if (g_strcmp0 (service_name, "gdm-autologin") == 0) {
|
||||||
|
+ if (manager->priv->plymouth_is_running) {
|
||||||
|
+ g_timeout_add_seconds (20, (GSourceFunc) plymouth_quit_with_transition, NULL);
|
||||||
|
+ manager->priv->plymouth_is_running = FALSE;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
remove_user_session (GdmManager *manager,
|
||||||
|
GdmSession *session)
|
||||||
|
{
|
||||||
|
GList *node;
|
||||||
|
GdmDisplay *display;
|
||||||
|
|
||||||
|
display = get_display_for_user_session (session);
|
||||||
|
|
||||||
|
if (display != NULL) {
|
||||||
|
gdm_display_unmanage (display);
|
||||||
|
gdm_display_finish (display);
|
||||||
|
}
|
||||||
|
|
||||||
|
node = g_list_find (manager->priv->user_sessions, session);
|
||||||
|
|
||||||
|
if (node != NULL) {
|
||||||
|
manager->priv->user_sessions = g_list_delete_link (manager->priv->user_sessions, node);
|
||||||
|
gdm_session_close (session);
|
||||||
|
g_object_unref (session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_user_session_exited (GdmSession *session,
|
||||||
|
int code,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
@@ -2141,60 +2146,67 @@ on_session_client_ready_for_session_to_start (GdmSession *session,
|
||||||
|
|
||||||
|
if (client_is_ready && waiting_to_start_user_session) {
|
||||||
|
start_user_session_if_ready (manager, session, service_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_session_client_connected (GdmSession *session,
|
||||||
|
GCredentials *credentials,
|
||||||
|
GPid pid_of_client,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
GdmDisplay *display;
|
||||||
|
char *username;
|
||||||
|
int delay;
|
||||||
|
gboolean enabled;
|
||||||
|
gboolean allow_timed_login = FALSE;
|
||||||
|
|
||||||
|
g_debug ("GdmManager: client connected");
|
||||||
|
|
||||||
|
display = get_display_for_user_session (session);
|
||||||
|
|
||||||
|
if (display == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!display_is_on_seat0 (display)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef WITH_PLYMOUTH
|
||||||
|
+ if (manager->priv->plymouth_is_running) {
|
||||||
|
+ plymouth_quit_with_transition ();
|
||||||
|
+ manager->priv->plymouth_is_running = FALSE;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
g_object_get (G_OBJECT (display), "allow-timed-login", &allow_timed_login, NULL);
|
||||||
|
|
||||||
|
if (!allow_timed_login) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
enabled = get_timed_login_details (manager, &username, &delay);
|
||||||
|
|
||||||
|
if (! enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gdm_session_set_timed_login_details (session, username, delay);
|
||||||
|
|
||||||
|
g_free (username);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_session_client_disconnected (GdmSession *session,
|
||||||
|
GCredentials *credentials,
|
||||||
|
GPid pid_of_client,
|
||||||
|
GdmManager *manager)
|
||||||
|
{
|
||||||
|
GdmDisplay *display;
|
||||||
|
gboolean display_is_local;
|
||||||
|
|
||||||
|
g_debug ("GdmManager: client disconnected");
|
||||||
|
|
||||||
|
display = get_display_for_user_session (session);
|
||||||
|
--
|
||||||
|
2.3.3
|
||||||
|
|
Loading…
Reference in New Issue
Block a user