summarylogtreecommitdiffstats
path: root/0002-nvidia-prime.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-nvidia-prime.patch')
-rw-r--r--0002-nvidia-prime.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/0002-nvidia-prime.patch b/0002-nvidia-prime.patch
new file mode 100644
index 000000000000..b4b804864ae0
--- /dev/null
+++ b/0002-nvidia-prime.patch
@@ -0,0 +1,100 @@
+From: Tim Lunn <tim@feathertop.org>
+Date: Sat, 22 Mar 2014 00:23:12 +0100
+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-session.c | 6 ++++++
+ daemon/gdm-x-session.c | 5 +++++
+ data/Prime.in | 6 ++++++
+ data/PrimeOff.in | 6 ++++++
+ data/meson.build | 2 +-
+ 6 files changed, 25 insertions(+), 2 deletions(-)
+ create mode 100644 data/Prime.in
+ create mode 100644 data/PrimeOff.in
+
+diff --git a/common/gdm-common.c b/common/gdm-common.c
+index b8de755..eb2ed38 100644
+--- a/common/gdm-common.c
++++ b/common/gdm-common.c
+@@ -720,7 +720,7 @@ gdm_run_script (const char *dir,
+ goto out;
+ }
+
+- env = gdm_get_script_environment (username,
++ env = gdm_get_script_environment ((g_strcmp0 (username, "root") == 0)?NULL:username,
+ display_name,
+ display_hostname,
+ display_x11_authority_file);
+diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
+index ca7d98f..e6fd59a 100644
+--- a/daemon/gdm-session.c
++++ b/daemon/gdm-session.c
+@@ -2987,6 +2987,12 @@ gdm_session_close (GdmSession *self)
+
+ g_list_free_full (self->outside_connections, g_object_unref);
+ self->outside_connections = NULL;
++
++ /* Run PrimeOff after the session is closed */
++ gdm_run_script (GDMCONFDIR "/PrimeOff", "root",
++ NULL,
++ NULL,
++ NULL);
+ }
+
+ void
+diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
+index f0082fd..fd0bd0b 100644
+--- a/daemon/gdm-x-session.c
++++ b/daemon/gdm-x-session.c
+@@ -618,6 +618,11 @@ spawn_session (State *state,
+
+ g_debug ("Running X session");
+
++ gdm_run_script (GDMCONFDIR "/Prime", "root",
++ state->display_name,
++ NULL, /* hostname */
++ state->auth_file);
++
+ launcher = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE);
+
+ if (state->environment != NULL) {
+diff --git a/data/Prime.in b/data/Prime.in
+new file mode 100644
+index 0000000..30caf03
+--- /dev/null
++++ b/data/Prime.in
+@@ -0,0 +1,6 @@
++#!/bin/sh
++
++primeoffload=/sbin/prime-offload
++if [ -f "$primeoffload" ]; then
++ $primeoffload
++fi
+diff --git a/data/PrimeOff.in b/data/PrimeOff.in
+new file mode 100644
+index 0000000..5a61c3c
+--- /dev/null
++++ b/data/PrimeOff.in
+@@ -0,0 +1,6 @@
++#!/bin/sh
++
++primeswitch=/sbin/prime-switch
++if [ -f "$primeswitch" ]; then
++ $primeswitch
++fi
+diff --git a/data/meson.build b/data/meson.build
+index 05a2011..05429d5 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -3,7 +3,7 @@ subdir('autostart')
+ subdir('dconf')
+
+ # XPath configs
+-foreach file : [ 'Init', 'PreSession', 'PostSession' ]
++foreach file : [ 'Init', 'PreSession', 'PostSession', 'Prime', 'PrimeOff' ]
+ generated_file = configure_file(
+ input: '@0@.in'.format(file),
+ output: file,