Add XWayland support (#16)

* save dev state

* fix xwayland-satellite supervisor lifecycle, readiness and cleanup

* remove wayland scanner protocol generated files

* default xwayland enabled with path

* remove jargons

* address x11 review: park unconfirmed cleanup, never signal a reaped group, fix storm test and notify dir mode

* fix resize tests: never build Size values from negative dimensions

* add min-width/min-height window rules that replace client minimum sizes

* rename effective_size_constraints to effective_minimum_size and minor cleanups
This commit is contained in:
Samuel Onoja authored and GitHub committed 2026-10-06 19:40:22 +01:00
1 parent ed23949a95
commit a6f83689f8
42 files changed
+7162 -1333

No files matched your search

+56
View File
@@ -54,6 +54,62 @@ other distributions; check the [Smithay
dependencies](https://github.com/Smithay/smithay#system-dependencies) for equivalent
libraries.
### X11 support (optional)
To run X11-only applications, Ferese launches
[xwayland-satellite](https://github.com/Supreeeme/xwayland-satellite),
which in turn needs an `Xwayland` binary. Both are runtime dependencies, not
build dependencies, and neither is needed to build Ferese.
- `Xwayland` ships with the X.Org server packages: `xorg-x11-server-Xwayland`
on Fedora and Debian/Ubuntu, `xorg-xwayland` on Arch.
- `xwayland-satellite` is not packaged by most distributions. Build or install
it from its upstream releases **with its `systemd` feature enabled**
(`cargo build --release --features systemd`). That feature is what sends the
`READY=1` readiness notification Ferese waits for. Upstream's default feature
set is empty, so a default build never sends it, Ferese's fixed 10-second
startup budget expires, and the service reports a startup failure instead of
a display. A spawned process that is still alive is not readiness.
Both the compositor's default and the packaged configuration ship with X11
enabled, so a session with the two pieces above needs no configuration change.
If you maintain your own `config.kdl`, the block to keep is
```kdl
xwayland {
enabled #true
startup on-demand
path "xwayland-satellite"
}
```
in `~/.config/ferese/config.kdl` and starting a new session, then check
`feresectl xwayland status`. See
[X11 support](configuration.md#x11-support-xwayland-satellite) for the full key
list, diagnostics, and known limitations.
#### Sandboxed applications
Ferese keeps the X11 cookie in a private file under `$XDG_RUNTIME_DIR`, and
applications inherit it through `XAUTHORITY`. Sandboxed packaging formats do not
all make that path visible, so an X11-only application may fail to start even
though `feresectl xwayland status` reports a running service.
Flatpak masks `/run/user/1000` with the application's own runtime directory, and
a `fallback-x11` permission is not granted inside a Wayland session. Both effects
deny the sandbox access to the display, so the application exits without a
window. Grant the socket explicitly:
```sh
flatpak override --user --socket=x11 com.spotify.Client
```
Snaps under strict confinement usually expose the real `/run/user/1000`, so a
snap that speaks X11 typically connects without extra configuration. That is a
confinement detail rather than a guarantee: if a snap application still cannot
reach the display, check whether its sandbox can read the `XAUTHORITY` path
reported by `feresectl xwayland status`.
### Rust toolchain
Install Rust through [rustup.rs](https://rustup.rs/). The checkout's