ironrdp-displaycontrol crate implements the Display Control Virtual Channel Extension as specified in MS-RDPEDISP. This dynamic virtual channel (DVC) enables clients to request display resolution and monitor layout changes during an active RDP session.
Overview
The Display Control channel operates over the dynamic virtual channel (DVC) infrastructure and allows clients to dynamically adjust the remote desktop resolution without reconnecting. This is essential for responsive window resizing and multi-monitor configurations.Channel Name
ironrdp-displaycontrol/src/lib.rs:4
Client API
DisplayControlClient
The client processor for display control operations.ironrdp-displaycontrol/src/client.rs:11
Constructor:
ready() -> bool- Returns true if capabilities have been receivedencode_single_primary_monitor()- Creates a monitor layout PDU for a single monitor
Core Types
DisplayControlPdu
Top-level PDU enum for display control messages:ironrdp-displaycontrol/src/pdu/mod.rs:28
DisplayControlCapabilities
Server capabilities for display control:ironrdp-displaycontrol/src/pdu/mod.rs:131
Constraints:
max_num_monitorsmust be less than or equal to 1024max_monitor_area_factor_amust be less than or equal to 16384max_monitor_area_factor_bmust be less than or equal to 16384max_monitor_area = max_monitor_area_factor_a * max_monitor_area_factor_b * max_num_monitors
DisplayControlMonitorLayout
Monitor layout configuration sent from client to server:ironrdp-displaycontrol/src/pdu/mod.rs:213
MonitorLayoutEntry
Individual monitor configuration:ironrdp-displaycontrol/src/pdu/mod.rs:354
Display Size Constraints:
- Width: 200 to 8192 pixels (must be even)
- Height: 200 to 8192 pixels
- Physical dimensions: 10 to 10,000 mm
- Desktop scale factor: 100% to 500%
Usage Example
Basic Setup
Requesting Resolution Change
Multi-Monitor Configuration
Monitor Orientation
ironrdp-displaycontrol/src/pdu/mod.rs:656
Device Scale Factors
ironrdp-displaycontrol/src/pdu/mod.rs:686
Protocol Flow
Initialization
- DVC channel is established using the channel name
"Microsoft::Windows::RDS::DisplayControl" - Server sends
DisplayControlCapabilitiesPDU - Client callback is invoked with server capabilities
- Client can now send
DisplayControlMonitorLayoutPDUs
Resolution Change Request
- Client detects window resize or monitor configuration change
- Client adjusts dimensions to valid ranges using
adjust_display_size() - Client creates
DisplayControlMonitorLayoutwith new configuration - Client sends PDU to server via DVC
- Server applies new resolution and responds with graphics updates
Validation Helpers
adjust_display_size
Adjusts width and height to be within valid ranges:ironrdp-displaycontrol/src/pdu/mod.rs:438
Important Notes
The primary monitor position must always be (0, 0). Attempting to position the primary monitor elsewhere will result in an error.
Exactly one monitor must be marked as primary. Layouts with zero or multiple primary monitors will be rejected.
Related Crates
- ironrdp-dvc: Dynamic virtual channel infrastructure and traits
- ironrdp-svc: Static virtual channel base types
- ironrdp-pdu: Protocol data unit encoding/decoding

