It is possible that display :0 is locked by a previous failed\crashed vnc session.
You can kill the :0 session by running:
vncserver -kill :0
From vncserver man page:
-kill :display#
This kills a VNC desktop previously started with
vncserver. It does this by killing the Xvnc process,
whose process ID is stored in the file
"$HOME/.vnc/host:display#.pid". The -kill option
ignores anything preceding the first colon (":") in the
display argument. Thus, you can invoke "vncserver
-kill $DISPLAY", for example at the end of your
xstartup file after a particular application exits.
You can also check if the lock files are still there. here is the relevant files, from the man page:
FILES
Several VNC-related files are found in the directory
$HOME/.vnc:
$HOME/.vnc/xstartup
A shell script specifying X applications to be run when
a VNC desktop is started. If this file does not exist,
then vncserver will create a default xstartup script
which attempts to launch your chosen window manager.
$HOME/.vnc/passwd
The VNC password file.
$HOME/.vnc/host:display#.log
The log file for Xvnc and applications started in
xstartup.
$HOME/.vnc/host:display#.pid
Identifies the Xvnc process ID, used by the -kill
option.
For example, I started vncserver with :22 and then killed it (twice):
[raamee 25 0 ~]$ vncserver :22
New 'myhost:22 (raamee)' desktop is myhost:22
Starting applications specified in /home/raamee/.vnc/xstartup
Log file is /home/raamee/.vnc/myhost:22.log
[raamee 26 0 ~]$ vncserver -kill :22
Killing Xvnc process ID 22733
[raamee 27 0 ~]$ vncserver -kill :22
Can't find file /home/raamee/.vnc/myhost:22.pid
You'll have to kill the Xvnc process manually