Blob Blame History Raw
From 2bb1f0dbd0772ba57ede8837c2f3856b4e7198c0 Mon Sep 17 00:00:00 2001
From: Wim Taymans <wtaymans@redhat.com>
Date: Thu, 12 Sep 2019 09:49:40 +0200
Subject: [PATCH 1/3] X11: Add xauthority parameter

Add an xauthority parameter and use it in the startup script.

Based on patch by Alexander Kurtz <kurtz.alex@googlemail.com>
---
 src/daemon/start-pulseaudio-x11.in        | 6 +++---
 src/modules/x11/module-x11-bell.c         | 8 ++++++++
 src/modules/x11/module-x11-cork-request.c | 8 ++++++++
 src/modules/x11/module-x11-publish.c      | 8 ++++++++
 src/modules/x11/module-x11-xsmp.c         | 8 ++++++++
 5 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/src/daemon/start-pulseaudio-x11.in b/src/daemon/start-pulseaudio-x11.in
index 15c79e187..2afa88563 100755
--- a/src/daemon/start-pulseaudio-x11.in
+++ b/src/daemon/start-pulseaudio-x11.in
@@ -22,14 +22,14 @@ set -e
 
 if [ x"$DISPLAY" != x ] ; then
 
-    @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null
-    @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY" > /dev/null
+    @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null
+    @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null
 
     if [ x"$KDE_FULL_SESSION" = x"true" ]; then
        @PACTL_BINARY@ load-module module-device-manager "do_routing=1" > /dev/null
     fi
 
     if [ x"$SESSION_MANAGER" != x ] ; then
-	@PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
+	@PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY xauthority=$XAUTHORITY session_manager=$SESSION_MANAGER" > /dev/null
     fi
 fi
diff --git a/src/modules/x11/module-x11-bell.c b/src/modules/x11/module-x11-bell.c
index 7b2be57bf..ec63c672f 100644
--- a/src/modules/x11/module-x11-bell.c
+++ b/src/modules/x11/module-x11-bell.c
@@ -46,6 +46,7 @@ static const char* const valid_modargs[] = {
     "sink",
     "sample",
     "display",
+    "xauthority",
     NULL
 };
 
@@ -127,6 +128,13 @@ int pa__init(pa_module*m) {
     u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
     u->x11_client = NULL;
 
+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
+            pa_log("setenv() for $XAUTHORITY failed");
+            goto fail;
+        }
+    }
+
     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
         goto fail;
 
diff --git a/src/modules/x11/module-x11-cork-request.c b/src/modules/x11/module-x11-cork-request.c
index 5c76711f2..966907109 100644
--- a/src/modules/x11/module-x11-cork-request.c
+++ b/src/modules/x11/module-x11-cork-request.c
@@ -48,6 +48,7 @@ PA_MODULE_USAGE("display=<X11 display>");
 
 static const char* const valid_modargs[] = {
     "display",
+    "xauthority",
     NULL
 };
 
@@ -130,6 +131,13 @@ int pa__init(pa_module *m) {
     m->userdata = u = pa_xnew0(struct userdata, 1);
     u->module = m;
 
+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
+            pa_log("setenv() for $XAUTHORITY failed");
+            goto fail;
+        }
+    }
+
     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
         goto fail;
 
diff --git a/src/modules/x11/module-x11-publish.c b/src/modules/x11/module-x11-publish.c
index 553b3417e..fcf306bef 100644
--- a/src/modules/x11/module-x11-publish.c
+++ b/src/modules/x11/module-x11-publish.c
@@ -58,6 +58,7 @@ static const char* const valid_modargs[] = {
     "sink",
     "source",
     "cookie",
+    "xauthority",
     NULL
 };
 
@@ -158,6 +159,13 @@ int pa__init(pa_module*m) {
     if (!(u->auth_cookie = pa_auth_cookie_get(m->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), true, PA_NATIVE_COOKIE_LENGTH)))
         goto fail;
 
+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
+            pa_log("setenv() for $XAUTHORITY failed");
+            goto fail;
+        }
+    }
+
     if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
         goto fail;
 
diff --git a/src/modules/x11/module-x11-xsmp.c b/src/modules/x11/module-x11-xsmp.c
index 29737c531..8f1d46ad3 100644
--- a/src/modules/x11/module-x11-xsmp.c
+++ b/src/modules/x11/module-x11-xsmp.c
@@ -48,6 +48,7 @@ static bool ice_in_use = false;
 static const char* const valid_modargs[] = {
     "session_manager",
     "display",
+    "xauthority",
     NULL
 };
 
@@ -141,6 +142,13 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    if (pa_modargs_get_value(ma, "xauthority", NULL)) {
+        if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) {
+            pa_log("setenv() for $XAUTHORITY failed");
+            goto fail;
+        }
+    }
+
     if (!(u->x11 = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
         goto fail;
 
-- 
2.21.0