Hi, I’m David Bélanger, a program manager on the Remote Desktop team working on the different Windows Remote Desktop clients.
In Windows 8.1 and Windows Server 2012 R2 we made some changes to Remote Desktop Connection (mstsc.exe) that greatly improve the experience for a few core scenarios that you might be using every day. In this blog, I discuss the improvements made to dynamically update the resolution and scaling level from the local system to the remote session and how this impacts your remote desktop experience.
Changes in Windows 8.1
Let’s start with the actual changes that we made in Windows 8.1 that will improve your remoting experience.
Dynamic resolution update
One of the changes we’ve made as part of RDP 8.1 is the addition of a new message that can be sent from the client to the server to dynamically update the resolution inside the remote session to match what is available on the client without the need to do a complete reconnect of the session. Previously, we only set the remote resolution during the initial connection. With this change, the resolution is set at connect time and can be updated when the client-side resolution changes while the app is in full screen mode, or when the app transitions from windowed mode to full screen. The resolution change is quick enough to be practically the same as a local change.
Dynamic scaling level update
With the proliferation of High DPI devices (high resolution displays in a small screen size) such as the Microsoft Surface Pro 2 device, it is common for folks like me who need a little extra visual help to increase the size of the items on the screen by changing the scaling level in the Display options.
Figure 1: Changing the scaling level in the Display options in Control Panel
The second change I wanted to point out is that Remote Desktop Connection now also updates the scaling level in the remote session to match the client-side configuration. This includes the per-monitor scaling level, which is new in Windows 8.1 and makes it a lot easier to use monitors of different sizes such as a 10-inch Surface device connected to a 24-inch monitor.
In contrast to changing the display resolution, changing the system scaling level requires a logoff/logon so that non-dynamic DPI aware applications can load the appropriate resources for the new scaling level. Between the time you change the scaling level and log off your session, you will still notice a difference as Windows will dynamically scale applications to the new scaling level, but the result might vary slightly. For more details about this, see Windows 8.1 DPI Scaling Enhancements.
Similar to the resolution, the scaling level is sent to the remote system at connection time, when the app is entering full screen mode or when a change happens while it’s in full screen. When connecting to a new session, the scaling level is applied and applications in the session will load the appropriate resources. If connecting to an existing session that had a different scaling level than the client-side system or when the scaling level changes dynamically, the scaling level will be applied but will be handled by Windows as mentioned previously. Changing the scaling factor inside the remote session is disabled; you must change it on the local PC and it will automatically be updated in the session.
We’ve made a few changes around how Remote Desktop Connection handles full screen that are worth calling out.
To leverage the dynamic update features for resolution and scaling level, you must start the desktop session with a Display configuration set to Full Screen on the Display tab. Doing so tells Remote Desktop Connection to manage the resolution and scaling level for you and keep it in sync with changes happening locally.
Figure 2: Selecting the Display Configuration in Remote Desktop Connection
The Display tab also allows you to connect using a specific static resolution (by specifying a different resolution). If you connect with a specific resolution, you will not need to worry about the resolution changing during the session. This can be useful if you have applications or hosts that require a lower resolution.
Note: The dynamic update features are always enabled for RemoteApp programs.
We’ve also made it easier to go from having the remote session in windowed mode to full screen. First, the Ctrl+Alt+Break keyboard shortcut still allows you to switch between window and full screen mode. Next, you can simply maximize the window and it will go to full screen mode if the local and remote resolutions already match. Note that if the connection is started with a Display configuration of Full screen, the remote resolution is updated when maximizing and the app will automatically go into full screen mode on maximize. Lastly, for a more explicit action, there is a new Full screen menu item available in the system menu.
Figure 3: Full screen option in the system menu for Remote Desktop Connection
We’ve made a small change in the way we handle multi-monitor since we now support dynamically changing the resolution including adding and removing monitors. To handle this, the Use all my monitors for the remote session check box on the Display tab is always enabled (even if you only have a single monitor attached to your local PC), so you can choose whether you prefer single or multi-monitor mode at any point.
Figure 4: Use all my monitors for the remote session option in Remote Desktop Connection
This allows you to start a session in multi-monitor mode with only one monitor, attach a new monitor at a later time, and start using it in the session right away without requiring a disconnect and reconnect. You can still start a session in single monitor mode whether you have a single or multiple monitors attached if you only want the session to be using one monitor at a time.
The above changes are great, but what do they really mean for you during your day-to-day remote desktop usage? In this section, I cover 5 improved scenarios resulting from the features above.
Scenario 1: Moving to a different monitor
In this scenario, you are using a system that has multiple monitors and at least two of them have a different resolution. You’ve also decided that you wanted the remote desktop to use only one monitor so you can continue using local applications or a different remote desktop on the second monitor. You did this by leaving the Use all my monitors for the remote session check box unchecked when connecting.
If after some time you decide to move the remote session to a new monitor with a different resolution, it’s as simple as dragging the session to the other monitor and going back to full screen mode. This will update the resolution and everything appears as expected for that monitor. No more letterboxing or dealing with scrollbars.
Scenario 2: Adding/removing a monitor
This scenario is often very common when using a laptop. For example, you come back to your office from a meeting and dock your laptop into a docking station that adds one or two external monitors. Or you arrive at a conference room already logged on to your laptop and connect it to the projector to share some content with the room. At the end of the meeting you detach from the projector to go back to your office.
Contrary to scenario 1 above, in this case you have started the remote session by checking the Use all my monitors for the remote session check box. This option now enables Remote Desktop Connection to dynamically add or remove monitors during the session.
So, you have an active remote session and add a new monitor. The first thing that happens is the session will go from full screen to windowed mode as Windows adjusts to the additional monitor (if the session was currently in full screen mode). Next, all you have to do is go back to full screen and a new virtual monitor will be added in the remote session and the session will be displayed in full screen mode across all the monitors. Follow a similar process to remove a monitor. No more need to disconnect and reconnect the session to leverage the new monitor.
RemoteApp now always uses all of your monitors (up to 16). If you are connected to a RemoteApp when you add the new monitor, you will immediately be able to move the app to the new monitor since the remote resolution is automatically updated to reflect the bigger desktop. Removing a monitor results in the RemoteApp program being moved back to one of the remaining monitors, similar to local applications. No more scenarios where RemoteApp programs are stuck on the first monitor or on a removed monitor.
Scenario 3: Device rotation
With so many new form factors for devices including tablets, this is now a very common scenario. The dynamic resolution update now allows Remote Desktop Connection to handle rotations almost as fast as the local system does. If you are using a desktop session in full screen mode and rotate your device, the session will remain in full screen mode and the remote resolution will be updated accordingly so that everything appears the same as you’d expect locally.
If you have a RemoteApp program running in the maximized state and you rotate the device, the app remains maximized in the new orientation as the resolution is updated both locally and in the session. This is the same as local applications.
In both cases, no more waiting for the session to automatically do a full reconnect for each rotation, which can take a few seconds based on your network connection.
Scenario 4: Desktop sessions on high DPI devices
When connecting to a remote system, the scaling level will now be reflected in the remote session and applications in the session will appear the same as they do locally and be easier to read. No more squinting at the content inside the session because it appears smaller when connecting from a device with a higher scaling level.
Scenario 5: RemoteApp programs on high DPI devices
On a system with a higher scaling factor, RemoteApp programs running side by side with a local application will now appear to be the same size and be just as easy to read. No more RemoteApp programs appearing smaller than local applications and being harder to read.
Windows 8.1 and Windows Server 2012 R2 provide improved remote desktop and RemoteApp experiences by dynamically updating the remote resolution and remote scale factor based on changes made locally (on the client PC), without the need to reconnect to the session. These features are enabled by default if both the client and the host are running Windows 8.1 or Windows Server 2012 R2. Dynamically updating the remote resolution is also available on Windows 7 clients connecting to Windows 8.1 or Windows Server 2012 R2 hosts with the Remote Desktop Protocol 8.1 Update for Windows 7 SP1 installed on the client.
Note: Questions and comments are welcome. However, please DO NOT post a request for troubleshooting by using the comment tool at the end of this post. Instead, post a new thread in the RDS & TS forum. Thank you!