emersion / xdg-desktop-portal-wlr

xdg-desktop-portal backend for wlroots
MIT License
579 stars 53 forks source link

Screencast broken. Made it work with xdp-remote-desktop.py #272

Open druskus20 opened 1 year ago

druskus20 commented 1 year ago

I am using Ubuntu (server) with:

xdg-desktop-portal-wlr/jammy,now 0.5.0-3 amd64 [installed]
xdg-desktop-portal/jammy-updates,now 1.14.4-1ubuntu2~22.04.1 amd64 [installed]
gstreamer1.0-pipewire/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed]
libpipewire-0.3-0/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed,automatic]
libpipewire-0.3-common/jammy-updates,now 0.3.48-1ubuntu3 all [installed,automatic]
libpipewire-0.3-dev/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed]
libpipewire-0.3-modules/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed,automatic]
libwireplumber-0.4-0/jammy,now 0.4.8-4 amd64 [installed,automatic]
pipewire-bin/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed,automatic]
pipewire-pulse/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed]
pipewire/jammy-updates,now 0.3.48-1ubuntu3 amd64 [installed,automatic]
wireless-regdb/jammy-updates,jammy-security,now 2022.06.06-0ubuntu1~22.04.1 all [installed,automatic]
wireplumber/jammy,now 0.4.8-4 amd64 [installed]
sway/jammy,now 1.7-1 amd64 [installed]

I used to have screensharing working until it broke after running apt upgrade a month ago or so.

Sharing a window on Chromium currently does not work, it fails with:

pipewire[1613]: pw.context: params Spa:Enum:ParamId:EnumFormat: 0:0 Invalid argument (input format (no more input forma>
pipewire[1613]: default: Object: size 360, type Spa:Pod:Object:Param:Format (262147), id Spa:Enum:ParamId:EnumFormat (3)
pipewire[1613]: default:   Prop: key Spa:Pod:Object:Param:Format:mediaType (1), flags 00000000
pipewire[1613]: default:     Id 2        (Spa:Enum:MediaType:video)
pipewire[1613]: default:   Prop: key Spa:Pod:Object:Param:Format:mediaSubtype (2), flags 00000000
pipewire[1613]: default:     Id 1        (Spa:Enum:MediaSubtype:raw)
pipewire[1613]: default:   Prop: key Spa:Pod:Object:Param:Format:Video:format (131073), flags 00000000
pipewire[1613]: default:     Id 12       (Spa:Enum:VideoFormat:BGRA)
...

I tried upgrading wireplumber, pipewire and xdg-desktop-portal-wlr to more recent versions directly from source but no luck. Finally I found:

https://gitlab.gnome.org/-/snippets/39

Which, after installing gstreamer:

  1. Works itself
  2. While it is running, screeensharing on Chromium also works. If you close the script abruptly, the screensharing keeps working (as I am assuming, the pipewire sources are not destroyed). If you however, close the script gracefully, the screencast freezes (I am assuming the script is closing the sources), and I get:
xdg-desktop-portal-wlr[2179]: 2023/06/06 13:36:44 [ERROR] - pipewire_loop_iterate failed: Unknown error -1
xdg-desktop-portal-wlr[2179]: 2023/06/06 13:36:44 [ERROR] - pipewire_loop_iterate failed: Unknown error -1
xdg-desktop-portal-wlr[2179]: 2023/06/06 13:36:44 [ERROR] - pipewire_loop_iterate failed: Unknown error -1
wireplumber[1616]: <WpPortalPermissionStorePlugin:0x558cb7a37a30> Failed to call Lookup: GDBus.Error:org.freedesktop.portal.Error.NotFound: No entry for camera
wireplumber[1616]: <WpPortalPermissionStorePlugin:0x558cb7a37a30> Failed to call Lookup: GDBus.Error:org.freedesktop.portal.Error.NotFound: No entry for camera
wireplumber[1616]: <WpPortalPermissionStorePlugin:0x558cb7a37a30> Failed to call Lookup: GDBus.Error:org.freedesktop.portal.Error.NotFound: No entry for camera
wireplumber[1616]: <WpPortalPermissionStorePlugin:0x558cb7a37a30> Failed to call Lookup: GDBus.Error:org.freedesktop.portal.Error.NotFound: No entry for camera

Workaround

Use the script https://gitlab.gnome.org/-/snippets/39 before sharing the screen on Chromium, then terminate the script abruptly.