xserver/hw
Olivier Fourdan a77d95af61 xwayland: Prevent Xserver grabs with rootless
Because of the design of most Wayland compositors, where the compositor
is both a Wayland server and an X11 window manager, any X11 client
issuing a server grab (i.e. XGrabServer()) can possibly hang the whole
desktop when Xwayland is running rootless.

This can happen with e.g. ImageMagick's import command with mutter.

1. "import" is launched and issues an XServerGrab(),
2. Xwayland restricts access to that "import" X11 client alone,
3. mutter continues to process events until it needs to sync with
   Xwayland (there's variability in time before the hang occurs),
4. When mutter does an XSync() (explicitly or implicitly through some
   other Xlib call), it will stop waiting for Xwayland to reply,
5. Xwayland waits for the XServerGrab() to be released by import,
6. "import" waits for a user input to release the XServerGrab(),
7. mutter is stuck waiting on Xwayland and does not process input
   events...

To prevent this, re-route the GrabServer/UngrabServer requests and
pretend the grab works but actually does nothing at all for all clients
but the X11 window manager (which can still issue X11 server grabs, at
its own risks).

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Closes: https://bugzilla.redhat.com/1914021
2022-09-13 14:18:10 +00:00
..
kdrive ephyr: Sync even less in ephyrInternalDamageRedisplay 2022-06-27 16:40:03 -04:00
vfb Remove autotools support 2021-10-27 13:15:40 +03:00
xfree86 Simplify auto device configuration for choosing wsfb, fbdev 2022-09-07 17:54:40 +00:00
xnest Replace "the the" with a single "the" in docs & comments 2022-03-31 13:27:57 -07:00
xquartz XQuartz: Improve type safety for X11Controller's application menu editor 2022-07-02 14:24:43 -07:00
xwayland xwayland: Prevent Xserver grabs with rootless 2022-09-13 14:18:10 +00:00
xwin gen_gl_wrappers: remove unused imports 2022-04-02 18:06:30 +00:00
meson.build Drop DMX DDX 2021-09-07 09:34:31 +00:00