Dariusz Gadomski has proposed merging
~dgadomski/ubuntu/+source/gdm3/+git/lp1782152:unblock-sigusr1 into
~ubuntu-desktop/ubuntu/+source/gdm3:ubuntu/bionic.
Commit message:
[ Alberto Milone ]
* ubuntu_nvidia_prime.patch:
- Run scripts for Prime before and after Gdm sessions (LP: #1778011).
[ Dariusz Gadomski ]
* debian/patches/unblock-sigusr1.patch:
- Unblock SIGUSR1 before PAM. (LP: #1782152)
Requested reviews:
Ubuntu Desktop (ubuntu-desktop)
Related bugs:
Bug #1778011 in nvidia-prime (Ubuntu): "SRU: PRIME Power Saving mode draws
too much power"
https://bugs.launchpad.net/ubuntu/+source/nvidia-prime/+bug/1778011
Bug #1782152 in gdm3 (Ubuntu): "GDM blocks SIGUSR1 used in PAM scripts"
https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/1782152
For more details, see:
https://code.launchpad.net/~dgadomski/ubuntu/+source/gdm3/+git/lp1782152/+merge/353089
Rebased on top of 3.28.3.
--
Your team Ubuntu Desktop is requested to review the proposed merge of
~dgadomski/ubuntu/+source/gdm3/+git/lp1782152:unblock-sigusr1 into
~ubuntu-desktop/ubuntu/+source/gdm3:ubuntu/bionic.
diff --git a/debian/patches/series b/debian/patches/series
index 8a5cba3..ed7aa6c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -11,3 +11,4 @@ revert_override_LANG_with_accountservices.patch
ubuntu_config_error_dialog.patch
ubuntu_dont_set_language_env.patch
ubuntu_prefer_ubuntu_session_fallback.patch
+unblock-sigusr1.patch
diff --git a/debian/patches/ubuntu_nvidia_prime.patch b/debian/patches/ubuntu_nvidia_prime.patch
index d2588b1..bf60c76 100644
--- a/debian/patches/ubuntu_nvidia_prime.patch
+++ b/debian/patches/ubuntu_nvidia_prime.patch
@@ -1,24 +1,25 @@
From: Tim Lunn <[email protected]>
Date: Sat, 22 Mar 2014 10:23:12 +1100
-Subject: Add hook to run prime-offload (as root) move Prime helpers into the
- gdm-x-session wrapper
-
++Subject: Add hooks to run prime scripts (as root) before and after a
++ gdm-session
+
++This allows enabling and disabling the dGPU on log out.
---
- common/gdm-common.c | 2 +-
- daemon/gdm-display.c | 1 +
- daemon/gdm-x-session.c | 10 ++++++++++
- data/Makefile.am | 24 ++++++++++++++++++++++++
- data/Prime | 6 ++++++
- data/PrimeOff | 6 ++++++
+ common/gdm-common.c | 2 +-
+ daemon/gdm-session.c | 6 ++++++
+ daemon/gdm-x-session.c | 5 +++++
+ data/Makefile.am | 24 ++++++++++++++++++++++++
+ data/Prime | 6 ++++++
+ data/PrimeOff | 6 ++++++
6 files changed, 48 insertions(+), 1 deletion(-)
create mode 100644 data/Prime
create mode 100644 data/PrimeOff
-Index: gdm3-3.26.0/common/gdm-common.c
+Index: gdm3-3.28.2/common/gdm-common.c
===================================================================
---- gdm3-3.26.0.orig/common/gdm-common.c 2017-09-14 08:24:10.584748891 -0400
-+++ gdm3-3.26.0/common/gdm-common.c 2017-09-14 08:24:10.580748834 -0400
-@@ -677,7 +677,7 @@ gdm_run_script (const char *dir,
+--- gdm3-3.28.2.orig/common/gdm-common.c
++++ gdm3-3.28.2/common/gdm-common.c
+@@ -706,7 +706,7 @@
goto out;
}
@@ -27,23 +28,28 @@ Index: gdm3-3.26.0/common/gdm-common.c
display_name,
display_hostname,
display_x11_authority_file);
-Index: gdm3-3.26.0/daemon/gdm-x-session.c
+Index: gdm3-3.28.2/daemon/gdm-session.c
===================================================================
---- gdm3-3.26.0.orig/daemon/gdm-x-session.c 2017-09-14 08:24:10.584748891 -0400
-+++ gdm3-3.26.0/daemon/gdm-x-session.c 2017-09-14 08:24:10.580748834 -0400
-@@ -172,6 +172,11 @@ on_x_server_finished (GSubprocess *subp
- if (cancelled) {
- goto out;
- }
-+ gdm_run_script (GDMCONFDIR "/PrimeOff", "root",
-+ state->display_name,
-+ NULL, /* hostname */
-+ state->auth_file);
+--- gdm3-3.28.2.orig/daemon/gdm-session.c
++++ gdm3-3.28.2/daemon/gdm-session.c
+@@ -2865,6 +2865,12 @@
+
+ g_list_free_full (self->priv->outside_connections, g_object_unref);
+ self->priv->outside_connections = NULL;
+
++ /* Run PrimeOff after the session is closed */
++ gdm_run_script (GDMCONFDIR "/PrimeOff", "root",
++ NULL,
++ NULL,
++ NULL);
+ }
- if (g_subprocess_get_if_exited (subprocess)) {
- int exit_status;
-@@ -614,6 +619,11 @@ spawn_session (State *state,
+ void
+Index: gdm3-3.28.2/daemon/gdm-x-session.c
+===================================================================
+--- gdm3-3.28.2.orig/daemon/gdm-x-session.c
++++ gdm3-3.28.2/daemon/gdm-x-session.c
+@@ -614,6 +614,11 @@
g_debug ("Running X session");
@@ -55,11 +61,11 @@ Index: gdm3-3.26.0/daemon/gdm-x-session.c
launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE);
if (state->environment != NULL) {
-Index: gdm3-3.26.0/data/Makefile.am
+Index: gdm3-3.28.2/data/Makefile.am
===================================================================
---- gdm3-3.26.0.orig/data/Makefile.am 2017-09-14 08:24:10.584748891 -0400
-+++ gdm3-3.26.0/data/Makefile.am 2017-09-14 08:24:10.584748891 -0400
-@@ -10,6 +10,8 @@ SUBDIRS = \
+--- gdm3-3.28.2.orig/data/Makefile.am
++++ gdm3-3.28.2/data/Makefile.am
+@@ -10,6 +10,8 @@
initdir = $(gdmconfdir)/Init
postdir = $(gdmconfdir)/PostSession
predir = $(gdmconfdir)/PreSession
@@ -68,7 +74,7 @@ Index: gdm3-3.26.0/data/Makefile.am
postlogindir = $(gdmconfdir)/PostLogin
workingdir = $(GDM_WORKING_DIR)
xauthdir = $(GDM_XAUTH_DIR)
-@@ -172,6 +174,8 @@ EXTRA_DIST += \
+@@ -173,6 +175,8 @@
Xsession.in \
Init.in \
PreSession.in \
@@ -77,7 +83,7 @@ Index: gdm3-3.26.0/data/Makefile.am
PostSession.in \
PostLogin \
org.gnome.login-screen.gschema.xml.in \
-@@ -236,6 +240,8 @@ uninstall-hook:
+@@ -237,6 +241,8 @@
$(DESTDIR)$(initdir)/Default \
$(DESTDIR)$(postlogindir)/Default.sample \
$(DESTDIR)$(predir)/Default \
@@ -86,7 +92,7 @@ Index: gdm3-3.26.0/data/Makefile.am
$(DESTDIR)$(postdir)/Default \
$(DESTDIR)$(sysconfdir)/dconf/db/gdm \
$(DESTDIR)$(sysconfdir)/dconf/profile/gdm \
-@@ -282,6 +288,24 @@ endif
+@@ -283,6 +289,24 @@
fi
$(INSTALL_SCRIPT) PreSession $(DESTDIR)$(predir)/Default
@@ -111,10 +117,10 @@ Index: gdm3-3.26.0/data/Makefile.am
if test '!' -d $(DESTDIR)$(postdir); then \
$(mkinstalldirs) $(DESTDIR)$(postdir); \
chmod 755 $(DESTDIR)$(postdir); \
-Index: gdm3-3.26.0/data/Prime
+Index: gdm3-3.28.2/data/Prime
===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdm3-3.26.0/data/Prime 2017-09-14 08:24:10.584748891 -0400
+--- /dev/null
++++ gdm3-3.28.2/data/Prime
@@ -0,0 +1,6 @@
+#!/bin/sh
+
@@ -122,10 +128,10 @@ Index: gdm3-3.26.0/data/Prime
+if [ -f "$primeoffload" ]; then
+ $primeoffload
+fi
-Index: gdm3-3.26.0/data/PrimeOff
+Index: gdm3-3.28.2/data/PrimeOff
===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gdm3-3.26.0/data/PrimeOff 2017-09-14 08:24:10.584748891 -0400
+--- /dev/null
++++ gdm3-3.28.2/data/PrimeOff
@@ -0,0 +1,6 @@
+#!/bin/sh
+
diff --git a/debian/patches/unblock-sigusr1.patch b/debian/patches/unblock-sigusr1.patch
new file mode 100644
index 0000000..3a4104c
--- /dev/null
+++ b/debian/patches/unblock-sigusr1.patch
@@ -0,0 +1,68 @@
+Description: session-worker: unblock SIGUSR1 before PAM
+ Right now we unblock SIGUSR1 just before starting
+ the session, but we should really do it before
+ starting the worker/PAM.
+
+ This commit fixes that and removes a useless call
+ to set SIGUSR1 back to the default disposition,
+ right before exec (which does the same thing anyway)
+ .
+
+Origin: upstream, https://gitlab.gnome.org/GNOME/gdm/commit/b0d1ca9ebf605abb63b95ef73d56d56a1109002e
+Bug: https://gitlab.gnome.org/GNOME/gdm/issues/399
+Bug-Debian: https://bugs.debian.org/905277
+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1782152
+Last-Update: 2018-07-23
+--- a/daemon/gdm-session-worker-job.c
++++ b/daemon/gdm-session-worker-job.c
+@@ -117,12 +117,19 @@
+ static void
+ session_worker_job_child_setup (GdmSessionWorkerJob *session_worker_job)
+ {
++ sigset_t mask;
+ session_worker_job_setup_journal_fds ();
+
+ /* Terminate the process when the parent dies */
+ #ifdef HAVE_SYS_PRCTL_H
+ prctl (PR_SET_PDEATHSIG, SIGTERM);
+ #endif
++ /*
++ * Reset signal mask to default since it was altered by the
++ * manager process
++ */
++ sigemptyset (&mask);
++ sigprocmask (SIG_SETMASK, &mask, NULL);
+ }
+
+ static void
+--- a/daemon/gdm-session-worker.c
++++ b/daemon/gdm-session-worker.c
+@@ -2025,8 +2025,6 @@
+ char *home_dir;
+ int stdin_fd = -1, stdout_fd = -1, stderr_fd = -1;
+ gboolean has_journald = FALSE, needs_controlling_terminal = FALSE;
+- sigset_t mask;
+-
+ /* Leak the TTY into the session as stdin so that it stays open
+ * without any races. */
+ if (worker->priv->session_tty_fd > 0) {
+@@ -2147,19 +2145,6 @@
+ */
+ signal (SIGPIPE, SIG_DFL);
+
+- /*
+- * Reset SIGUSR1 to default since it was blocked by the manager
+- * process for the X server startup handshake
+- */
+- signal (SIGUSR1, SIG_DFL);
+-
+- /*
+- * Reset signal mask to default since it was altered by the
+- * manager process
+- */
+- sigemptyset (&mask);
+- sigprocmask (SIG_SETMASK, &mask, NULL);
+-
+ gdm_session_execute (worker->priv->arguments[0],
+ worker->priv->arguments,
+ (char **)
--
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop