My previous answer worked on the EC2 instance I was using, but when I tried it on another machine later, I had issues. (I'm still not sure what the difference was)
Anyway, I used the following instead. The different line is in .vnc/xstartup:
gnome-session --session=ubuntu-2d &
Here we go:
sudo apt-get install ubuntu-desktop tightvncserver
Edit ~/.vnc/xstartup to read:
# Change "GNOME" to "KDE" for a KDE desktop, or "" for a generic desktop
#Uncommment this line if using Gnome and your keyboard mappings are incorrect.
# Load X resources (if any)
if [ -e "$HOME/.Xresources" ]
# Try a GNOME session, or fall back to KDE
if [ "GNOME" = "$MODE" ]
if which gnome-session >/dev/null
echo starting gnome
# Try a KDE session, or fall back to generic
if [ "KDE" = "$MODE" ]
if which startkde >/dev/null
# Run a generic session
if [ -z "$MODE" ]
xsetroot -solid "#DAB082"
x-terminal-emulator -geometry "80x24+10+10" -ls -title "$VNCDESKTOP Desktop" &
tightvncserver -nolisten tcp -localhost -geometry 1024x786 :1
Like I said, it worked great for me, but your mileage may vary.