x11: Don't set NET_WM_PID when sandboxed
authorMatthias Clasen <mclasen@redhat.com>
Mon, 28 May 2018 16:09:47 +0000 (12:09 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 30 May 2018 00:19:05 +0000 (20:19 -0400)
It is not useful, and some window managers misinterpret it and
add some "runs as root" indication to the window decoration.

See https://github.com/mate-desktop/marco/issues/301

gdk/x11/gdkdisplay-x11.c
gdk/x11/gdksurface-x11.c

index 4ac989d3de3299b7abc8f4781376ad5b9272cc45..c452fd1a96930d91303ac6bcd077a7d4eea2e2a1 100644 (file)
@@ -1436,7 +1436,6 @@ gdk_x11_display_open (const gchar *display_name)
   gchar *argv[1];
 
   XClassHint *class_hint;
-  gulong pid;
   gint ignore;
   gint maj, min;
 
@@ -1600,11 +1599,15 @@ gdk_x11_display_open (const gchar *display_name)
   if (gdk_sm_client_id)
     set_sm_client_id (display, gdk_sm_client_id);
 
-  pid = getpid ();
-  XChangeProperty (display_x11->xdisplay,
-                  display_x11->leader_window,
-                  gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
-                  XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
+  if (!gdk_running_in_sandbox ())
+    {
+      /* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
+      pid_t pid = getpid ();
+      XChangeProperty (display_x11->xdisplay,
+                       display_x11->leader_window,
+                       gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_PID"),
+                       XA_CARDINAL, 32, PropModeReplace, (guchar *) & pid, 1);
+    }
 
   /* We don't yet know a valid time. */
   display_x11->user_time = 0;
index c55589c8498d28f94b9c4de47ab8aa012055b2bb..43c48b986a103fad76ab8de784f32ada0d3fd6d3 100644 (file)
@@ -718,7 +718,6 @@ setup_toplevel_window (GdkSurface    *surface,
   Display *xdisplay = GDK_SURFACE_XDISPLAY (surface);
   XID xid = GDK_SURFACE_XID (surface);
   XSizeHints size_hints;
-  long pid;
   Window leader_window;
 
   set_wm_protocols (surface);
@@ -749,12 +748,16 @@ setup_toplevel_window (GdkSurface    *surface,
   /* This will set WM_CLIENT_MACHINE and WM_LOCALE_NAME */
   XSetWMProperties (xdisplay, xid, NULL, NULL, NULL, 0, NULL, NULL, NULL);
   
-  pid = getpid ();
-  XChangeProperty (xdisplay, xid,
-                  gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
-                  XA_CARDINAL, 32,
-                  PropModeReplace,
-                  (guchar *)&pid, 1);
+  if (!gdk_running_in_sandbox ())
+    {
+      /* if sandboxed, we're likely in a pid namespace and would only confuse the wm with this */
+      pid_t pid = getpid ();
+      XChangeProperty (xdisplay, xid,
+                       gdk_x11_get_xatom_by_name_for_display (x11_screen->display, "_NET_WM_PID"),
+                       XA_CARDINAL, 32,
+                       PropModeReplace,
+                       (guchar *)&pid, 1);
+    }
 
   leader_window = GDK_X11_DISPLAY (x11_screen->display)->leader_window;
   if (!leader_window)