This is the tightvncserver init.d script, tightvncserver, in /etc/init.d:

# Provides:     tightvncserver
# Required-Start:   $remote_fs $syslog
# Required-Stop:    $remote_fs $syslog
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    tightvncserver starts at boot time
# Description:      Start tightvncserver connection service

# set the USER variable for the VNC server
# Note: Starting the VNC Server on :1 means we need to connect to port 5901
# To install:
# sudo chown root:root /etc/init.d/tightvncserver
# sudo chmod 755 /etc/init.d/tightvncserver
# sudo update-rc.d tightvncserver defaults
export USER=pi
export HOME=/home/pi

eval cd ~$USER

case "$1" in
    su - $USER -c "/usr/bin/tightvncserver -geometry 1280x720 -depth 24 :1"
    echo "Starting TightVNC server for $USER"

    pkill Xtightvnc
    echo "TightVNC server stopped"

    echo "Usage: /etc/init.d/tightvncserver {start|stop}"
    exit 1
exit 0

Here is the ls -l:

-rwxr-xr-x 1 root root 918 Dec 13 14:02 tightvncserver

It will run when I type at the command prompt:

sudo ./tightvncserver start

But it does not run at boot time. I have done the command:

sudo update-rc.d tightvncserver defaults

Can anyone explain what is wrong?

2 Answers 2


If you are running Jessie this should be started with a systemd service. I copied from https://www.raspberrypi.org/forums/viewtopic.php?t=123457&p=830506

Create a new file /etc/systemd/system/[email protected] with the following contents:

Description=Remote desktop service (VNC)
After=syslog.target network.target

ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i


Make executable

sudo chmod +x  /etc/systemd/system/[email protected]

You can test with

sudo systemctl start [email protected]

Enable with

sudo systemctl daemon-reload && sudo systemctl enable [email protected]
  • This seemed to work, though it sure looks like magic when compared to the simpler (IMHO) "start | stop" approach to scripting. Thanks very much! Commented Dec 13, 2015 at 22:44
  • When i try to test above method with the start command. I get following error Job for [email protected] failed. See 'systemctl status [email protected]' and 'journalctl -xn' for details.. Here's gist of those command's errors.. Thanks
    – giri-sh
    Commented Dec 27, 2015 at 7:00

I used crontab instead, which worked fine for me.

 sudo crontab -e

Select editor for yourself i used nano editor which i felt easy myself.

@reboot su - pi -c '/usr/bin/tightvncserver :1'

or if you use VNC server instead of tightvncserver.

@reboot su - pi -c '/usr/bin/vncserver :1'

Explanation of the command: "su" is a user to select, "pi" is a name of user; you may have other users, "c" defines as command followed by in single quotations.


My suggestions is that before you reboot your pi please run the rebootcode

su - pi -c '/usr/bin/vncserver :1'

So this will verify us if there is a display available for that particular user, if not it will ask you to submit password for your display. Just give some password and remember that will be your VNC viewer password. And then reboot your pi. Open your vncviewer/tightvncviewer from your computer type "IP-RASPBERRYpi:1" then password. If everything goes well you can now access your pi in GUI with VNCVIEWER. Cheers..

  • After hours of (newb) searching, this solution worked without any other weird errors or mucking through arcane settings. I used @reboot su - pi -c '/usr/bin/vncserver :1 -geometry 1600x900 -depth 24' to make the display a little bigger.
    – apathos
    Commented May 5, 2017 at 23:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.