[mutter] Add --no-x11 flag so mutter wayland can be started without X11



commit d5c5669f2ab8c2e3c6ac70daa99919115001ac03
Author: Armin Krezović <krezovic armin gmail com>
Date:   Sun Aug 27 20:44:58 2017 +0200

    Add --no-x11 flag so mutter wayland can be started without X11
    
    https://bugzilla.gnome.org/show_bug.cgi?id=759538

 src/core/display.c         | 18 +++++++++++++-----
 src/core/main-private.h    |  2 ++
 src/core/main.c            | 26 ++++++++++++++++++++++++++
 src/wayland/meta-wayland.c | 13 ++++++++++---
 4 files changed, 51 insertions(+), 8 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index 655e1cf58..2b07b8d71 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -35,6 +35,7 @@
 #include "events.h"
 #include "util-private.h"
 #include <meta/main.h>
+#include "main-private.h"
 #include "window-private.h"
 #include "boxes-private.h"
 #include "frame.h"
@@ -813,12 +814,19 @@ meta_display_open (void)
 
   display->bell = meta_bell_new (display);
 
-  x11_display = meta_x11_display_new (display, &error);
-  g_assert (x11_display != NULL); /* Required, for now */
-  display->x11_display = x11_display;
-  g_signal_emit (display, display_signals[X11_DISPLAY_OPENED], 0);
+  if (meta_should_autostart_x11_display ())
+    {
+      x11_display = meta_x11_display_new (display, &error);
+      g_assert (x11_display != NULL); /* Required, for now */
+      display->x11_display = x11_display;
+      g_signal_emit (display, display_signals[X11_DISPLAY_OPENED], 0);
 
-  timestamp = display->x11_display->timestamp;
+      timestamp = display->x11_display->timestamp;
+    }
+  else
+    {
+      timestamp = meta_display_get_current_time_roundtrip (display);
+    }
 
   display->last_focus_time = timestamp;
   display->last_user_time = timestamp;
diff --git a/src/core/main-private.h b/src/core/main-private.h
index 36f4b313a..e59b76608 100644
--- a/src/core/main-private.h
+++ b/src/core/main-private.h
@@ -31,4 +31,6 @@ typedef enum _MetaCompositorType
 void meta_override_compositor_configuration (MetaCompositorType compositor_type,
                                              GType              backend_gtype);
 
+gboolean meta_should_autostart_x11_display (void);
+
 #endif /* META_MAIN_PRIVATE_H */
diff --git a/src/core/main.c b/src/core/main.c
index f294b7511..948c389f7 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -177,6 +177,7 @@ static gboolean  opt_sync;
 #ifdef HAVE_WAYLAND
 static gboolean  opt_wayland;
 static gboolean  opt_nested;
+static gboolean  opt_no_x11;
 #endif
 #ifdef HAVE_NATIVE_BACKEND
 static gboolean  opt_display_server;
@@ -232,6 +233,12 @@ static GOptionEntry meta_options[] = {
     N_("Run as a nested compositor"),
     NULL
   },
+  {
+    "no-x11", 0, 0, G_OPTION_ARG_NONE,
+    &opt_no_x11,
+    N_("Run wayland compositor without starting Xwayland"),
+    NULL
+  },
 #endif
 #ifdef HAVE_NATIVE_BACKEND
   {
@@ -453,6 +460,12 @@ calculate_compositor_configuration (MetaCompositorType *compositor_type,
     run_as_wayland_compositor = check_for_wayland_session_type ();
 #endif /* HAVE_NATIVE_BACKEND */
 
+  if (!run_as_wayland_compositor && opt_no_x11)
+    {
+      meta_warning ("Can't disable X11 support on X11 compositor\n");
+      meta_exit (META_EXIT_ERROR);
+    }
+
   if (run_as_wayland_compositor)
     *compositor_type = META_COMPOSITOR_TYPE_WAYLAND;
   else
@@ -709,3 +722,16 @@ prefs_changed_callback (MetaPreference pref,
       break;
     }
 }
+
+gboolean
+meta_should_autostart_x11_display (void)
+{
+  MetaBackend *backend = meta_get_backend ();
+  gboolean wants_x11 = TRUE;
+
+#ifdef HAVE_WAYLAND
+  wants_x11 = !opt_no_x11;
+#endif
+
+  return META_IS_BACKEND_X11_CM (backend) || wants_x11;
+}
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
index 86ee748ea..31aa968cf 100644
--- a/src/wayland/meta-wayland.c
+++ b/src/wayland/meta-wayland.c
@@ -49,6 +49,8 @@
 #include "meta-xwayland.h"
 #include "meta-wayland-egl-stream.h"
 
+#include "main-private.h"
+
 static MetaWaylandCompositor _meta_wayland_compositor;
 static char *_display_name_override;
 
@@ -400,8 +402,11 @@ meta_wayland_init (void)
 
   meta_wayland_eglstream_controller_init (compositor);
 
-  if (!meta_xwayland_start (&compositor->xwayland_manager, compositor->wayland_display))
-    g_error ("Failed to start X Wayland");
+  if (meta_should_autostart_x11_display ())
+    {
+      if (!meta_xwayland_start (&compositor->xwayland_manager, compositor->wayland_display))
+        g_error ("Failed to start X Wayland");
+    }
 
   if (_display_name_override)
     {
@@ -422,7 +427,9 @@ meta_wayland_init (void)
       compositor->display_name = g_strdup (display_name);
     }
 
-  set_gnome_env ("DISPLAY", meta_wayland_get_xwayland_display_name (compositor));
+  if (meta_should_autostart_x11_display ())
+    set_gnome_env ("DISPLAY", meta_wayland_get_xwayland_display_name (compositor));
+
   set_gnome_env ("WAYLAND_DISPLAY", meta_wayland_get_wayland_display_name (compositor));
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]