I turned on the VNC server on my virtual machine (host is Linux, and in this case the guest is Windows, but I have the same problem with any guest OS), and when I use a VNC client on an iPhone, I cannot get any of the shifted characters (capital letters and symbols) to appear.
After doing some additional research, I found the following (http://www.realvnc.com/docs/rfbproto.pdf):
The difference between upper and lower case keysyms is significant. This is
unlike some of the keyboard processing in the X Window System which treats
them as the same. For example, a server receiving an uppercase ’A’ keysym
without any shift presses should interpret it as an uppercase ’A’. Again this may
involve an internal “fake” shift press.
According to this, it is the server's responsibility to do a "fake" shift press if necessary, and the client does not have to send a "shift" key event along with the keysym. I have attached a TCP tunnel trace from the iPhone to the VMWare VNC server showing the "bar" keyboard event, but no shift keyboard event before it.
Does anyone know if there are any settings in the .vmx that I can enable in order to produce a "fake" shift press when an upper case keysym is received?
As a workaround, I installed and configured a Real VNC server and client on a Windows machine on the same network as the host.
I connect to the Windows machine and start the VNC client on that system, connecting to the VMWare VNC server. Real VNC on the Windows system does the simulated shift, and passes it on to the VMWare server. Not exactly what I want, but it does work . . .