This is to work around "misbehaving" (for lack of a better term) clients. At the moment, Firefox Nightly and Google Chrome/Chromium are known to be suchs client: When XWayland support is enabled, Firefox first creates an XWayland surface, closes this (before mapping it) and then opens an XDG toplevel surface. Cage tries to manage the first XWayland surface, but when it closes, Cage has no surfaces left and hence closes as well. Hence, Cage terminates before it picks up on Firefox's XDG toplevel, and Firefox (rightly) prints it cannot read the Wayland pipe. In Chromium's case, it simply opens an XWayland surface which it immediately closes, before opening the "real" XWayland surface. The workaround is to track whether an XWayland surface has been mapped and, if it hasn't, to not exit when we have no views left. Firefox's behavior and the workaround are discussed in #18. This commit fixes #18 and is part of the fix for #19. |
||
|---|---|---|
| cage.c | ||
| config.h.in | ||
| idle_inhibit_v1.c | ||
| idle_inhibit_v1.h | ||
| LICENSE | ||
| meson.build | ||
| meson_options.txt | ||
| output.c | ||
| output.h | ||
| README.md | ||
| seat.c | ||
| seat.h | ||
| server.h | ||
| view.c | ||
| view.h | ||
| xdg_shell.c | ||
| xdg_shell.h | ||
| xwayland.c | ||
| xwayland.h | ||
Cage: a Wayland kiosk
This is Cage, a Wayland kiosk. A kiosk runs a single, maximized application.
This README is only relevant for development resources and instructions. For a description of Cage and installation instructions for end-users, please see its project page.
Building and running Cage
You can build Cage with the meson build system. It requires wayland, wlroots and xkbcommon to be installed. Simply execute the following steps to build Cage:
$ meson build
$ ninja -C build
Cage comes with compile-time support for XWayland. To enable this,
first make sure that your version of wlroots is compiled with this
option. Then, add -Dxwayland=true to the meson command above. Note
that you'll need to have the XWayland binary installed on your system
for this to work.
You can run Cage by running ./build/cage APPLICATION. If you run it
from within an existing X11 or Wayland session, it will open in a
virtual output as a window in your existing session. If you run it at
a TTY, it'll run with the KMS+DRM backend. In debug mode (default
build type with Meson), press Alt+Esc to quit. To build a release
build, use meson build --buildtype=release.
Cage is based on the annotated source of TinyWL and rootston.
Bugs
For any bug, please create an issue on GitHub.
License
Copyright © 2018-2019 Jente Hidskes hjdskes@gmail.com