Static vs Dynamic Virtual Channels
- Static Virtual Channels (SVC)
- Dynamic Virtual Channels (DVC)
Static virtual channels are negotiated in the GCC Conference Create data blocks during connection setup. Each channel gets a fixed slot in the MCS channel table identified by a name up to 8 characters long (e.g.
cliprdr, rdpsnd, rdpdr).- Maximum of 31 static channels per connection.
- Channel names are exchanged in
CS_NET/SC_NETGCC blocks. - The low-level send/receive callbacks are
freerdp::SendChannelData/freerdp::ReceiveChannelData. - Plugin entry point convention:
<name>_DVCPluginEntryfor DVC plugins,VirtualChannelEntryExfor SVCs.
CLIPRDR_SVC_CHANNEL_NAME ("cliprdr"), DRDYNVC_SVC_CHANNEL_NAME ("drdynvc") constants in the channel headers define the exact negotiation names.Plugin Loading Mechanism
Channel plugins are loaded in theLoadChannels callback on the freerdp instance. The channel manager (rdpChannels) uses the addin loader to find shared libraries by name.
Register via settings
Static channels are added to the settings channel collection before connecting:
LoadChannels callback fires
freerdp::LoadChannels is called (possibly multiple times on redirect). The default implementation in libfreerdp-client iterates freerdp_static_channel_collection_find() and freerdp_dynamic_channel_collection_find() and calls freerdp_channels_attach().Built-in Channels
cliprdr — Clipboard Redirection
cliprdr — Clipboard Redirection
Type: SVC | Name:
cliprdr | Header: include/freerdp/channels/cliprdr.hImplements MS-RDPECLIP. Synchronises clipboard content (text, images, files) between client and server. Supports the full format negotiation and file clipboard extension.rdpsnd — Audio Output
rdpsnd — Audio Output
Type: SVC | Name:
rdpsnd | Header: include/freerdp/channels/rdpsnd.hImplements MS-RDPEA (Remote Desktop Protocol: Audio Output Virtual Channel Extension). Streams PCM/encoded audio from the server to the client. The client side uses OS audio backends (PulseAudio, ALSA, macOS CoreAudio, etc.) via audin/rdpsnd backend plugins.audin — Audio Input
audin — Audio Input
Type: DVC | Header:
include/freerdp/channels/audin.hCaptures microphone audio on the client and forwards it to the server (MS-RDPEAI).rdpdr — Device Redirection
rdpdr — Device Redirection
Type: SVC | Name:
rdpdr | Header: include/freerdp/channels/rdpdr.hImplements MS-RDPEFS. The parent channel for all device redirection. Sub-protocols include:- drive — filesystem/drive redirection (
channels/drive/) - printer — printer redirection (
channels/printer/) - serial — serial port redirection (
channels/serial/) - parallel — parallel port redirection (
channels/parallel/) - smartcard — smartcard redirection (
channels/smartcard/)
drdynvc — Dynamic Virtual Channel transport
drdynvc — Dynamic Virtual Channel transport
Type: SVC | Name:
drdynvc | Header: include/freerdp/channels/drdynvc.hThe carrier channel for all DVCs (MS-RDPEDYC). Implements CREATE_REQUEST_PDU, DATA_PDU, CLOSE_REQUEST_PDU, and soft-sync PDUs.rdpgfx — Graphics Pipeline
rdpgfx — Graphics Pipeline
Type: DVC | Name:
rdpgfx / Microsoft::Windows::RDS::Graphics | Header: include/freerdp/channels/rdpgfx.hImplements MS-RDPEGFX (Windows 8+). Provides the modern graphics pipeline with surface commands, frame framing, H.264/AVC, RemoteFX Progressive codec, ClearCodec, and explicit surface management. See Codecs for details.rdpei — Touch / Extended Input
rdpei — Touch / Extended Input
Type: DVC | Header:
include/freerdp/channels/rdpei.hImplements MS-RDPEI: multi-touch and pen input forwarding from client to server.urbdrc — USB Redirection
urbdrc — USB Redirection
Type: DVC | Header:
include/freerdp/channels/urbdrc.hImplements MS-RDPEUSB. Forwards USB devices over the DVC using libusb on the client side.smartcard — Smartcard Redirection
smartcard — Smartcard Redirection
Type: SVC (inside rdpdr) | Header:
include/freerdp/channels/scard.hImplements MS-RDPESC. Forwards PCSC / WinSCard API calls from the server to the client’s physical smartcard reader.rail — Remote Application Integrated Locally
rail — Remote Application Integrated Locally
Type: SVC | Header:
include/freerdp/channels/rail.hImplements MS-RDPERP (RemoteApp). Individual server-side windows are presented as native client windows.disp — Display Update
disp — Display Update
Type: DVC | Header:
include/freerdp/channels/disp.hImplements MS-RDPEDISP. Allows the client to dynamically resize the desktop or change monitor layout without reconnecting.geometry — Video Optimized Remoting
geometry — Video Optimized Remoting
Type: DVC | Header:
include/freerdp/channels/geometry.hCarries geometry information for optimized video (MS-RDPEVOR) – used together with the video channel.video — Video Optimized Remoting
video — Video Optimized Remoting
Type: DVC | Header:
include/freerdp/channels/video.hImplements MS-RDPEVOR. Delivers H.264-encoded video streams for specific surfaces.encomsp — Multiparty
encomsp — Multiparty
Type: SVC | Header:
include/freerdp/channels/encomsp.hImplements MS-RDPEMC. Supports desktop-sharing / collaboration scenarios.remdesk — Remote Assistance
remdesk — Remote Assistance
Type: SVC | Header:
include/freerdp/channels/remdesk.hImplements MS-RDPERA. Remote Assistance channel for helper-assisted sessions.rdpecam — Camera Redirection
rdpecam — Camera Redirection
Type: DVC | Header:
include/freerdp/channels/rdpecam.hImplements MS-RDPECAM. Redirects client camera devices to the remote session.echo — Echo Test
echo — Echo Test
Type: DVC | Header:
include/freerdp/channels/echo.hDiagnostic loopback channel (MS-RDPEECO).telemetry
telemetry
Type: DVC | Header:
include/freerdp/channels/telemetry.hCollects connection telemetry data (MS-RDPET).ainput — Advanced Input
ainput — Advanced Input
Type: DVC | Header:
include/freerdp/channels/ainput.hExtended pointer and input events beyond the core input channel.location — Location Redirection
location — Location Redirection
Type: DVC | Header:
include/freerdp/channels/location.hRedirects client GPS/location data to the remote session.rdpear — Kerberos/NTLM Redirection
rdpear — Kerberos/NTLM Redirection
Type: DVC | Header:
include/freerdp/channels/rdpear.hImplements MS-RDPEAR: redirects authentication package calls (Kerberos, NTLM) from server to client for credential delegation.Retrieving a Channel Context at Runtime
Once a DVC plugin is loaded and the channel is open, the client context pointer is published via a channel event. The common pattern usingrdpClientContext (include/freerdp/client.h) stores well-known contexts in fixed offset fields:
ChannelConnected pub/sub event on context->pubSub:
