-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
feat(linux)!: Support streaming through XDG portals and Pipewire #4417
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Bundle ReportChanges will increase total bundle size by 90 bytes (0.01%) ⬆️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: sunshine-esmAssets Changed:
Files in
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #4417 +/- ##
=========================================
Coverage ? 15.11%
=========================================
Files ? 95
Lines ? 19874
Branches ? 9178
=========================================
Hits ? 3004
Misses ? 13329
Partials ? 3541
Flags with carried forward coverage won't be shown. Click here to find out more.
|
f7173e3 to
d65baf5
Compare
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
70a1b64 to
9f0aefb
Compare
This comment was marked as resolved.
This comment was marked as resolved.
9f0aefb to
5987970
Compare
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
|
The current implementation in this PR doesn't perform as well as KMS capture on my system (RX 6600, Ubuntu 25.10 with Mesa PPA enabled), but this should not be a reason not to add support. It might work better on more powerful systems, and there is still room for improvement (example: the frame pacing code has not been changed to align with @gschintgen's improved pacing on KMS/X11). Also, the KDE/KWin developers have already stated that kmsgrab should be deprecated in favour of xdg portal. |
This comment was marked as resolved.
This comment was marked as resolved.
a4292c6 to
cca272e
Compare
This comment was marked as resolved.
This comment was marked as resolved.
2d722c3 to
a4947e8
Compare
This comment was marked as resolved.
This comment was marked as resolved.
5e2dfe4 to
8401227
Compare
|
Touch and Pen passthrough (inputs that are relative to the display) are not working as well |
|
hello, how do you make use of it? is there a toggle or a env var to switch to xdg portals from kmsgrab? |
It is configurable in the web UI. |
This is not present in the glad version imported in Sunshine, plug the holes so that these functions may be used.
Add a new portal "grab" implementation that will request the necessary permissions over XDG portals and use Pipewire for video data streaming. This supports DMA-Buf buffer exchange for hardware accelerated encoding (VAAPI, nvenc), software encoding will only work with memory buffers.
Require GIO and PIPEWIRE packages for portal support and use SYSTEM include directories. Also, clarify the fatal error message order for missing dependencies.
Pipewire has been added to the dependency lists for FreeBSD, Arch, Fedora, Homebrew, and Debian-based packaging and build scripts. This ensures proper support and integration for systems using Pipewire.
A value of 2 indicates "Remember this Selection". Co-authored-by: Carson Katri <[email protected]>
…ystems (#4510) Co-authored-by: Carlos Garnacho <[email protected]> Co-authored-by: Carson Katri <[email protected]> Co-authored-by: d.bondarev <[email protected]>
Corrects the installation path for sunshine-kms to use %{buildroot}%{_bindir} instead of %{_bindir}, ensuring proper packaging for RPM builds.
Replaced raw arrays with std::array for type safety and clarity in buffer and struct allocations throughout portalgrab.cpp. Updated related code to use .data() and .size() where appropriate, improving maintainability and reducing potential for errors.
Changed C-style string constants to array declarations for REQUEST_PREFIX and SESSION_PREFIX. Updated function calls to use std::array::data() for params. Split spa_pod_frame variable declarations for clarity.
Updated path string construction in portalgrab.cpp to use std::format instead of g_strdup_printf, improving type safety and readability.
Applied minor refactoring for improved code clarity and consistency: added [[maybe_unused]] to unused parameters, replaced C-style casts with static_cast, removed unnecessary semicolon, and simplified std::fill_n usage.
Refactored parameter assignment to avoid post-increment in array indexing and improve clarity. Updated token check to use direct character comparison. Replaced enum class usage with 'using enum' for mem_type_e. Improved logging for unrecognized capture status by using std::to_underlying.
Updated function parameters and local variables to use const qualifiers where appropriate. Replaced C-style casts with C++ static_cast for improved type safety and clarity. Minor code cleanups and style improvements.
Added the -DSUNSHINE_ENABLE_PORTAL=ON flag to FreeBSD CI, COPR spec, Flatpak, and linux_build.sh scripts to ensure the portal feature is enabled across all build targets. Also reordered some CMake flags for consistency.
Reformats the mark_as_advanced call in FindSystemd.cmake to list each variable on a separate line, improving readability and maintainability.
4821198 to
a10aed4
Compare
|






Description
This PR replaces #2507 ... Thanks to @garnacho for the initial work on this!
This PR adds a new "grab" implementation to use XDG desktop portals and Pipewire. There is a breaking change that comes along with this implementation, which is that the sunshine binaries provided by our packages will no longer have the setcap applied to them automatically for KMS capture. For the RPM packages built in our Copr repo, there is a new
sunshine-kmsbinary which does have the setcap applied. This was done this way to work around rpm-ostree issues that do not allow the user to apply setcap manually.TODO:
-DSUNSHINE_ENABLE_PORTALthroughoutScreenshot
Issues Fixed or Closed
Roadmap Issues
Type of Change
Checklist
AI Usage