diff --git a/README.md b/README.md index 06b369e..4527bd7 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ cohesive experience—beautiful by default and unmistakably yours. motion that update without restarting your session. - **Ready for real setups:** gestures, multi-monitor support, fractional scaling, screenshots, background services and session locking. +- **Screen sharing:** a native display picker and PipeWire video streams for + portal-compatible recording and conferencing apps. ## Make it yours @@ -92,6 +94,7 @@ Settings → Shortcuts** to change them or assign gestures to other actions. - [Desktop widgets](docs/desktop-widgets.md) - [Notifications](docs/notifications.md) - [Native locker](docs/locking.md) +- [Screen sharing and recording](docs/screen-sharing.md) ## Development diff --git a/docs/screen-sharing.md b/docs/screen-sharing.md index be77645..48397f9 100644 --- a/docs/screen-sharing.md +++ b/docs/screen-sharing.md @@ -5,6 +5,9 @@ Applications use the standard desktop portal to request a display, then receive video through PipeWire. A recorder or conferencing application handles encoding, saving files, or sending video; those tasks do not run inside the compositor. +There is no built-in Record button or video-file recorder in the shell yet. +Start recording from an application that supports the Wayland ScreenCast portal. + ## Start sharing Use a Wayland screen-sharing or recording source in your application. Ferese @@ -55,6 +58,32 @@ or multiple-display recording can therefore use significant CPU and memory bandwidth. A paused stream checks capture availability once per second so locking also ends sessions without an active consumer. +## Development checks + +Build the backend after installing the native dependencies in the +[installation guide](installation.md#requirements): + +```sh +cargo build --release --locked -p xdg-desktop-portal-ferese +cargo test --locked -p xdg-desktop-portal-ferese +``` + +The opt-in integration test opens a temporary nested compositor and uses a +private D-Bus session. It requires built Ferese and locker binaries, Python +GI/GStreamer with `pipewiresrc`, `dbus-daemon`, `xdg-desktop-portal`, and `bwrap`. +It checks capture delivery, cancellation, frontend loss, and lock revocation: + +```sh +FERESE_TEST_PORTAL=1 \ +FERESE_TEST_PORTAL_BINARY=target/release/xdg-desktop-portal-ferese \ +python3 scripts/tests/test_portal_isolated.py +``` + +Add `FERESE_TEST_PORTAL_CONSENT=1` to exercise the native picker and restricted +PipeWire connection. Select the temporary display and click **Share** when +prompted. Tests capture only the nested preview and leave host PAM policies and +D-Bus activation unchanged. + ## Troubleshooting Confirm that `XDG_CURRENT_DESKTOP` contains `Ferese`, PipeWire is running, and diff --git a/site/README.md b/site/README.md index e4ebeb1..563e8df 100644 --- a/site/README.md +++ b/site/README.md @@ -18,7 +18,8 @@ site sources or Markdown guides, then refresh the browser. - `site/index.html` and `site/styles.css`: homepage and shared visual design. - `site/content/index.md`: handbook introduction. -- `docs/{installation,configuration,desktop-widgets,notifications}.md`: source guides. +- `docs/{installation,configuration,desktop-widgets,notifications,locking,screen-sharing}.md`: + source guides. - `scripts/build-site.py`: renders Markdown, resolves links, generates section navigation, previous/next links, and the search index. - `site/app.js`: handbook search and code copying. Reading and navigation work diff --git a/site/content/index.md b/site/content/index.md index 499bce4..12ed516 100644 --- a/site/content/index.md +++ b/site/content/index.md @@ -43,6 +43,13 @@ If you prefer a text editor, your configuration lives at: Ferese reloads changes as you make them. An invalid edit keeps the last working configuration. Settings also preserves a backup of your previous save. See [Saving and validation](configuration.md#saving-and-validation). +## Share your screen + +Use Ferese’s native display picker to share a monitor with a portal-compatible +recording or conferencing app. The app handles saving or sending video; Ferese +does not yet have a Record button in the shell. See [Screen sharing and +recording](screen-sharing.md) for setup, stopping a session, and supported sources. + ## Keep a recovery path Keep another desktop session available while testing hardware behavior. Save your work before logging out: `feresectl exit` and **Super + Shift + E** end the current session immediately. @@ -59,5 +66,3 @@ cargo fmt --all --check ``` The [source repository](https://github.com/ferese-wm/ferese) is the place to explore implementation details and report issues. When reporting a problem, include how to reproduce it, whether you used the nested or DRM backend, and relevant logs. - -[Screen sharing](screen-sharing.md) covers display consent, PipeWire streams, and recording support. diff --git a/site/index.html b/site/index.html index 8b3d79b..09ac611 100644 --- a/site/index.html +++ b/site/index.html @@ -112,6 +112,12 @@ preview Ferese inside an existing Wayland session before installing.
++ Share a display with recording and conferencing apps through Ferese’s + native screen-sharing portal. Choose what to share and stop at any time. + See screen sharing and recording + for setup and current capabilities. +
Built in Rust on Smithay. Development happens on GitHub.