mbox series

[bug#52492,0/7] Improve screen sharing support under Wayland

Message ID 20211214214502.24913-1-dev@jpoiret.xyz
Headers show
Series Improve screen sharing support under Wayland | expand

Message

Josselin Poiret Dec. 14, 2021, 9:45 p.m. UTC
Hello,

This patchset updates and improves various packages related to screen
sharing/screeshotting on Wayland, and especially wlroots-based
compositors.

I can get screensharing working in icecat on sway by manually starting
pipewire then wireplumber (and then xdg-desktop-portal-wlr followed by
xdg-desktop-portal if they're not installed in your profile, otherwise
your user DBus session will launch them automatically), and starting
icecat with

`LD_LIBRARY_PATH="$(./pre-inst-env guix build
pipewire)/lib:$LD_LIBRARY_PATH" icecat`

since the pipewire library is dlopened by libwebrtc rather than
statically or dynamically linked.  We could possibly add this to the
icecat package, as it has a wrapper doing a similar thing for other
libraries.

Another way to test screensharing without icecat would be to use this
python script [1], using `guix shell python python-pygobject
gst-plugins-bad pipewire python-dbus -- python3 xdp-screen-cast.py`.

I also took the liberty to patch xdg-desktop-portal-wlr's
screenshotting process, as it simply execl'd to slurp and grim.  Along
with an update to flameshot, I can use the latter properly on sway as
well.

Best,
Josselin

[1] https://gitlab.gnome.org/-/snippets/19

Josselin Poiret (7):
  gnu: pipewire-0.3: Use new input style
  gnu: pipewire-0.3: Update to 0.3.41
  gnu: Add wireplumber
  gnu: xdg-desktop-portal-wlr: Update to 0.5.0
  gnu: xdg-desktop-portal-wlr: Use new input style
  gnu: xdg-desktop-portal-wlr: Add binary dependencies
  gnu: flameshot: Update to 0.10.2

 gnu/local.mk                                  |  1 +
 gnu/packages/freedesktop.scm                  | 38 ++++++++++----
 gnu/packages/image.scm                        |  4 +-
 gnu/packages/linux.scm                        | 52 +++++++++++++++----
 ...g-desktop-portal-wlr-harcoded-length.patch | 28 ++++++++++
 5 files changed, 100 insertions(+), 23 deletions(-)
 create mode 100644 gnu/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch

Comments

Mathieu Othacehe Dec. 19, 2021, 12:22 p.m. UTC | #1
Hey Josselin,

Thanks for working on that. I fixed a few minor details and pushed the
series.

> I can get screensharing working in icecat on sway by manually starting
> pipewire then wireplumber (and then xdg-desktop-portal-wlr followed by
> xdg-desktop-portal if they're not installed in your profile, otherwise
> your user DBus session will launch them automatically), and starting
> icecat with

As discussed on #guix, we may need to find a way to start those services
automatically.

> since the pipewire library is dlopened by libwebrtc rather than
> statically or dynamically linked.  We could possibly add this to the
> icecat package, as it has a wrapper doing a similar thing for other
> libraries.

Seems fair.

I also tried to run obs, this way:

--8<---------------cut here---------------start------------->8---
QT_QPA_PLATFORM=wayland obs
--8<---------------cut here---------------end--------------->8---

was prompted for a screen/window to capture using pipewire, but then I
have the following error, does that ring a bell?

--8<---------------cut here---------------start------------->8---
info: ------------------------------------------------
info: Loaded scenes:
info: - scene 'Scene':
info:     - source: 'Window Capture (PipeWire)' (pipewire-window-capture-source)
info: ------------------------------------------------
qt.qpa.wayland: Wayland does not support QWindow::requestActivate()
info: [pipewire] available cursor modes:
info: [pipewire]     - Metadata
info: [pipewire]     - Always visible
info: [pipewire]     - Hidden
Attempted path: share/obs/obs-studio/images/overflow.png
Attempted path: /gnu/store/1fp8wl9y2i72ld59d1spw85xvw9l88ws-obs-27.0.1/share/obs/obs-studio/images/overflow.png
info: [pipewire] screencast session created
info: [pipewire] asking for window…
info: adding 42 milliseconds of audio buffering, total audio buffering is now 42 milliseconds (source: Mic/Aux)

warning: [pipewire] Failed to start screencast, denied or cancelled by user
info: PipeWire initialized (sender name: 1_1734)
info: User added source 'Screen Capture (PipeWire)' (pipewire-desktop-capture-source) to scene 'Scene'
info: [pipewire] available cursor modes:
info: [pipewire]     - Metadata
info: [pipewire]     - Always visible
info: [pipewire]     - Hidden
info: [pipewire] screencast session created
info: [pipewire] asking for desktop…
warning: [pipewire] Failed to start screencast, denied or cancelled by user
^Cinfo: ==== Shutting down ==================================================
--8<---------------cut here---------------end--------------->8---

Thanks,

Mathieu