Overview
FreeRDP supports several strategies for handling high-DPI displays and window resizing. The right approach depends on whether you want the remote session to adapt its resolution at runtime or whether you want the client to scale a fixed-resolution session to fit the window.Build requirements
Graphics scaling (required for/smart-sizing and high-DPI bitmap scaling) requires one of:
| Library | CMake flag | Notes |
|---|---|---|
| libswscale (FFmpeg) | -DWITH_SWSCALE=ON | Part of the FFmpeg libraries |
| Cairo | -DWITH_CAIRO=ON | Widely available on Linux/macOS |
At least one scaling backend must be present for
/smart-sizing to function. Dynamic resolution
(/dynamic-resolution) does not require a scaling library because the remote session changes
its own resolution rather than scaling bitmaps on the client.Dynamic resolution
With/dynamic-resolution, FreeRDP sends a display update to the server whenever the client window is resized. The server re-renders at the new resolution — no client-side bitmap scaling takes place.
/dynamic-resolution sets both FreeRDP_SupportDisplayControl and FreeRDP_DynamicResolutionUpdate. The server must support the Display Control virtual channel (available in Windows 8 / Server 2012 and newer).
Smart-sizing
With/smart-sizing, the remote session keeps its initial resolution and FreeRDP scales the received bitmaps to fit the client window. This works with any server version.
Multi-monitor support
Span all monitors
/multimon flag sends the combined geometry of all connected monitors to the server. Use /multimon:force to send multimon information even if the server has not explicitly advertised support.
Select specific monitors
Window size and DPI
For a fixed session resolution without multimon:Recommended configurations
- HiDPI laptop (single screen)
- Multiple monitors
- Fixed resolution with scaling
Use dynamic resolution so the session always matches the window exactly:
