Assign VNC password using script

As far as I know, the vncserver command only prompts for a password if the password file (by default, $HOME/.vnc/passwd) is absent - typically the first time it's run for a particular user. You could either script that initial vncserver interaction using 'expect', or pre-create the user's password file by calling the vncpasswd utility via expect before you run vncserver for the first time; e.g. [CAUTION: this is absolutely minimal, you should add some sanity checks if this is used in a serious environment]

#!/bin/sh

prog=/usr/bin/vncpasswd
mypass="newpass"

/usr/bin/expect <<EOF
spawn "$prog"
expect "Password:"
send "$mypass\r"
expect "Verify:"
send "$mypass\r"
expect eof
exit
EOF

If you don't want to (or can't) use 'expect', then there are various hacks available on the web - VNC passwords apparently use a form of DES encryption so searching with the terms 'VNC' 'DES' 'password' should get you what you need (I'm not going to link here since I cannot vouch for any particular one).

For completeness, note that the default Ubuntu 'Desktop Sharing' uses vino, and the password for that appears to be simply base64 encoded, so it is possible to set it directly e.g.

gsettings set org.gnome.Vino vnc-password "$(echo -n "newpass" | base64)"

Hope this helps


Was able to do it this way today (from a dockerfile at least):

RUN printf "password\npassword\n\n" | vncpasswd

I found another way of doing this in a script (as root):

#!/bin/sh    

myuser="asimov"
mypasswd="mysecret"

mkdir /home/$myuser/.vnc
echo $mypasswd | vncpasswd -f > /home/$myuser/.vnc/passwd
chown -R $myuser:$myuser /home/$myuser/.vnc
chmod 0600 /home/$myuser/.vnc/passwd

Cheers!