You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GNOME Remote Desktop's RDP backend (gnome-remote-desktop-daemon, FreeRDP-server-side) requires the client to advertise EGFX (MS-RDPEGFX, the Graphics Pipeline Extension) in its confirmActive capabilities. Reported on #109 by @agevlakh — server-side journalctl shows:
[RDP] Client did not advertise support for the Graphics Pipeline, closing connection
[ERROR] freerdp_peer::Capabilities() callback failed
[ERROR] [rdp_peer_handle_state_demand_active]:
[CONNECTION_STATE_CAPABILITIES_EXCHANGE_DEMAND_ACTIVE] failed
Without EGFX, GRD bails during caps validation, before sending ServerDemandActive. Haven sees the channel close as "unexpected Share Control PDU" because the expected PDU never arrives.
xrdp and Microsoft Windows hosts still ship bitmap updates via the legacy path even when the client lacks EGFX. GRD is the strict outlier here, and increasingly the default RDP server on modern Linux desktops (Fedora 41+, Ubuntu 24.04 GNOME, etc.).
Scope
IronRDP has the building blocks but not the integration:
✅ ironrdp-pdu defines dvc::gfx::ServerPdu / ClientPdu and the EGFX message types
✅ ironrdp-replay-client example consumes EGFX from a recorded stream
❌ ironrdp-session does not currently negotiate EGFX as a client in-session
❌ No glue connecting decoded EGFX surfaces to Haven's RdpScreen display path
Work breakdown
Negotiation: advertise EGFX in confirmActive capabilities; open the Microsoft::Windows::RDS::Graphics dynamic VC over DRDYNVC after capability exchange.
Decoders: at minimum RemoteFX (RFX) and NSCodec for Linux servers; AVC420/AVC444 (H.264) for Windows hosts already on EGFX. May be possible to advertise only what we can decode and let the server pick.
Display integration: route decoded surface tiles into the existing RdpScreenBitmap + Compose canvas path that legacy bitmap updates already use.
Frame-ack timing: GRD requires timely frame ACKs or it stops sending updates.
Affected users
Anyone using:
Fedora 41+ default GNOME (RDP enabled in Sharing panel)
Ubuntu 24.04+ GNOME with RDP sharing
Any system that picked up GRD's RDP backend (which Wayland-first distros increasingly default to)
Currently shows as "unexpected Share Control PDU" with NLA on, or "HYBRID_REQUIRED_BY_SERVER" with NLA off (since GRD doesn't fall back to TLS-only).
References
RDP error #109 — original report (agevlakh, GRD on Fedora)
IronRDP#1232 — asked Devolutions to surface PDU type in the error string
IronRDP roadmap discussion would be the right place to flag this externally — they're likely to take an EGFX implementation upstream
Workaround until implemented
For users on GRD: switch to xrdp on the same host. apt install xrdp / dnf install xrdp then systemctl enable --now xrdp and disable RDP in GNOME Settings → Sharing. Less polished but works with bitmap updates.
Context
GNOME Remote Desktop's RDP backend (
gnome-remote-desktop-daemon, FreeRDP-server-side) requires the client to advertise EGFX (MS-RDPEGFX, the Graphics Pipeline Extension) in itsconfirmActivecapabilities. Reported on #109 by @agevlakh — server-side journalctl shows:Without EGFX, GRD bails during caps validation, before sending
ServerDemandActive. Haven sees the channel close as "unexpected Share Control PDU" because the expected PDU never arrives.xrdp and Microsoft Windows hosts still ship bitmap updates via the legacy path even when the client lacks EGFX. GRD is the strict outlier here, and increasingly the default RDP server on modern Linux desktops (Fedora 41+, Ubuntu 24.04 GNOME, etc.).
Scope
IronRDP has the building blocks but not the integration:
ironrdp-pdudefinesdvc::gfx::ServerPdu/ClientPduand the EGFX message typesironrdp-dvcimplements DRDYNVC (Dynamic Virtual Channel) framingironrdp-graphicsexists with codec primitivesironrdp-replay-clientexample consumes EGFX from a recorded streamironrdp-sessiondoes not currently negotiate EGFX as a client in-sessionRdpScreendisplay pathWork breakdown
confirmActivecapabilities; open theMicrosoft::Windows::RDS::Graphicsdynamic VC over DRDYNVC after capability exchange.RDPGFX_CAPS_ADVERTISE_PDU/RDPGFX_CAPS_CONFIRM_PDU, frame ACKs, surface create/delete, surface-to-output, cache import/export.RdpScreenBitmap+ Compose canvas path that legacy bitmap updates already use.Affected users
Anyone using:
Currently shows as "unexpected Share Control PDU" with NLA on, or "HYBRID_REQUIRED_BY_SERVER" with NLA off (since GRD doesn't fall back to TLS-only).
References
Workaround until implemented
For users on GRD: switch to xrdp on the same host.
apt install xrdp/dnf install xrdpthensystemctl enable --now xrdpand disable RDP in GNOME Settings → Sharing. Less polished but works with bitmap updates.