Skip to content

Linux/Wayland: fullscreen recording requires 3 picker steps (2 OS dialogs + 1 in-app dropdown) before it starts #268

@uriva

Description

@uriva

Status

Recording now works end-to-end on Linux/Wayland after #267 — thanks! However the start flow still goes through three separate picker interactions before recording begins, which is confusing.

Environment

Steps to reproduce

  1. Click the Record button (no source preselected)
  2. OS portal dialog appears → select "Built-in display"
  3. The in-app source dropdown opens on the overlay
  4. Select the screen again in the dropdown
  5. Click Record again
  6. Countdown timer runs
  7. When countdown ends, OS portal dialog appears again → select "Entire screen"
  8. Recording finally starts

So the user is asked to pick the screen three times (twice via the OS portal, once via Recordly's in-app dropdown) for what is conceptually a single action.

Root cause (best guess)

On Wayland, the xdg-desktop-portal model is fundamentally different from macOS/Windows:

  • `desktopCapturer.getSources()` itself triggers a portal dialog (this is what fires when the in-app dropdown opens to populate sources).
  • `getDisplayMedia()` triggers another portal dialog because Wayland portal grants are per-request (no reusable token without xdg-desktop-portal session restore).
  • The in-app source picker assumes a macOS/Windows-style enumerate-then-pick model, which doesn't fit Wayland.

Suggested UX on Linux/Wayland

Skip the in-app source picker entirely; clicking Record should go straight to:

  1. countdown
  2. single `getDisplayMedia()` call (one OS portal dialog)
  3. recording starts

This collapses the three picker interactions into one. Electron's `setDisplayMediaRequestHandler` accepts a `useSystemPicker` option that may help here — worth investigating whether it's now supported on Linux in Electron 39.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions