There has been one thing I have been reminded of this last week about mouse cursors. They can be incredibly sluggish when dealing with remote sessions. During PortICA development we saw this nature and initially were a bit confused about what could be causing this. It’s more noticeable on slower connections. If you move the mouse around, it becomes jerky and very difficult to control. The cursor only flashes on the screen at fixed intervals and it is hard to guess where it is going to end up.
The culprit was something called cursor shadowing. If cursor shadowing is turned on (which is the default) then the cursor forms a shadow over whatever it is currently on top of. In theory this is done to make it easier for the user to locate the mouse cursor since it has a built in shadow around it that would help match it against any background. However, in practice, the shadow is so subtle that it would be difficult to recognize as even being there. I bet if you stare at your mouse cursor right now you might just notice that it has a shadow for the very first time.
Personally I don’t find the shadow to be a huge advantage. In the case of remote access, it is a huge hindrance. The reason is fairly simple. The cursor shadowing is achieved using what is known as alpha blending. The technique calls for mixing the image with the background in a way that blends more than overlaps. It is a technology that has been around since the 70’s and has finally hit widespread acceptance in Windows with Vista. This kind of transparency can be very useful but with the cursor shadow (pointer shadow from the mouse control panel) the cost is too high compared to the benefit.
In remote sessions, it was decided long ago by Citrix that the local mouse pointer should be used instead of showing the mouse pointer being drawn from the server. This was a very wise decision and it gave the user the responsiveness he or she wanted. It was still possible to have a delay with response time but at least the mouse acted as it always had. Cursor shadowing changes the rules. Because the local pointer cannot be blended with the remote desktop, the code has to revert to using the server’s mouse pointer. This brings back all the ugliness of having to draw the mouse pointer on the server. Essentially it is impossible to use a slow or high latency connection with cursor shadowing turned on. Well, not impossible but very frustrating.
Citrix software automatically turns off cursor shadowing for Citrix Presentation Server. The same is not true for Microsoft Remote Desktop. The same was also true for the early versions of PortICA. It makes such a bigger difference to turn it off. Just this last week I was using RDP to some XP systems that still had it turned on. I couldn’t understand why the mouse pointer was so bad until I recognized the symptoms and went hunting for turning off the cursor shadowing.
Go into the Control Panel and select the mouse applet. You should see this after selecting the Pointers tab:
At the bottom, you will notice the “Enable pointer shadow”.
It should look like this:
Click OK and you are done. I bet you probably won’t even notice a difference with how it looks. If you are using XP remotely with “Remote Desktop” I would bet you’ll notice a performance difference.
As an added tip, if you are using something like VMware Workstation inside an RDP session, be sure to switch it off there as well. Basically I think you should turn it off everywhere regardless of how it is being used. It is one of those kind of features that doesn’t give much bang for the buck and yet you get so much back when you turn it off.
I tried searching for some kind of support decision on this from Microsoft but could not Google a decent enough answer. Good luck to you. I hope that your mouse cursors will now perhaps be a bit more well behaved.
One thing to consider is that this is a per user setting, stored in the registry under HKCU\Control Panel\Desktop, so this would need to be done for each user, or at the very least the default user.
The value in question is RegBinary called UserPreferencesMask. Jerry Honeycutt’s Windows XP Registry Guide has a great writeup on it (http://www.microsoft.com/mspress/books/sampchap/6232.aspx), and references can be found on Technet as well (http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/55198.mspx?mfr=true). Tweakhound as well (http://tweakhound.com/xp/xptweaks/regfiles_2.htm)
Thanks I never though about the shadowing being a system resource issue.
I have a Win XP VMware session inside a Vista-Vista RDP session, the mouse shadow has to be disabled in the virtual machine because the performance is very poor, but if this is done, the mouse cursor(s) turn full black within it.
Enabled or disabling it on Vista does not noticeable alter performance, possible because both machines are equipped with Vista.
I’m not sure what is causing the cursor to go black but I have seen what you are talking about. There does seem to be something strange going on with VMware with the mouse when you go to login.
One possibility is that the pre-login settings are making the cursor go strange. I have not tried it with Vista so I couldn’t tell you what is going on there.
I allways take over my desktop throught RDP over ICA from a remove location and with Vista this has been a total pain in the ass. The mousecursor moving all ways.
I found some websites that told me to change some settings in the TCP settings but they didnt work. Setting the mousecursor to a non 3D one fixed the total lag problem 🙂
It’s good to hear good news from time to time. This post about the mouse cursor has led to a long term following. I suspect very few people could have anticipated this.
When simple things go wrong, it is really annoying. Luckily in this case there is way around it.
Yes, good article. I was also having trouble at login when connecting to a virtual machine through remote desktop, even though my cursor settings were set accordingly. It is a matter of changing the values for the *default* user.
The registry key in question is:
HKEY_USERS\.DEFAULT\Control Panel\Desktop “UserPreferencesMask”
An appropriate value can be copied from your local profile, at:
HKEY_CURRENT_USER\Control Panel\Desktop “UserPreferencesMask”
For example, I have a standard XP install with system settings for “maximum performance” and pointer shadow disabled– my values are “90 12 01 80”
wow thanks man! lol Awesome
thanks, this helped me solve my black mouse pointer problem when Remote desktop from home XP laptop to work XP laptop. I didn’t have the “Enable Pointer Shadow” check box, so I selected “None” as my Scheme.