Method 1: VNC Server as a Service on Ubuntu desktop similar to Redhat sysconfig
# Make script executable
sudo chmod a+x /etc/init.d/vncserver
# Make script run with default runlevels
sudo update-rc.d vncserver defaults
# You can also install Redhat style chkconfig using
# Use below to list service startup statuses
chkconfig --list
service --status-all
# Start and stop service manually
/etc/init.d/vncserver stop
/etc/init.d/vncserver start
or
service vncserver stop
service vncserver start
Method 2 - using Ubuntu/ Debian style Upstart that replaced inittab
sudo initctl stop vncserve
username@servername:/etc/init.d$ cat /etc/init.d/vncserve
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: 3 4 5
# Default-Stop: 0 6
### END INIT INFO
#PATH="$PATH:/usr/X11R6/bin/"
# The Username:Group that will run VNC
export USER="username"
#${RUNAS}
# The display that VNC will use
DISPLAY="1"
# Color depth (between 8 and 32)
DEPTH="16"
# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
#GEOMETRY="1024x768"
GEOMETRY="1280x730"
#GEOMETRY="1280x1024"
# The name that the VNC Desktop will have.
NAME="mY-VNC-Server"
OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;
stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0
sudo apt-get install vncserver
sudo mkdir -p /etc/sysconfig
sudo touch /etc/sysconfig/vncservers
sudo vi /etc/sysconfig/vncservers
# Add following VNC Server instances where username and arguments are defined for each session.
VNCSERVERS="1:user1 2:user2 3:user3"
VNCSERVERARGS[1]="-geometry 1280x992 -depth 16"
VNCSERVERARGS[2]="-geometry 800x600 -depth 8"
VNCSERVERARGS[3]="-geometry 980x720"
VNCSERVERARGS[1]="-geometry 1280x992 -depth 16"
VNCSERVERARGS[2]="-geometry 800x600 -depth 8"
VNCSERVERARGS[3]="-geometry 980x720"
sudo vi /etc/init.d/vncserver
# Add below to the service script
#!/bin/bash
#
# chkconfig: - 91 35
# description: Starts and stops vncserver. \
# used to provide remote X administration services.
# Source function library.
# . /etc/init.d/functions
# Source networking configuration.
# . /etc/sysconfig/network
# Check that networking is up.
# [ ${NETWORKING} = "no" ] && exit 0
unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/sysconfig/vncservers ] && . /etc/sysconfig/vncservers
prog=$"VNC server"
start() {
REQ_USER=$2
echo -n $"Starting $prog: "
ulimit -S -c 0 >/dev/null 2>&1
RETVAL=0
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
DISP="${display%%:*}"
export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
fi
done
}
stop() {
REQ_USER=$2
echo -n $"Shutting down $prog: "
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
export USER="${display##*:}"
su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
fi
done
echo -e "\n"
echo "Vncserver Stopped"
}
# See how we were called.
case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
#
# chkconfig: - 91 35
# description: Starts and stops vncserver. \
# used to provide remote X administration services.
# Source function library.
# . /etc/init.d/functions
# Source networking configuration.
# . /etc/sysconfig/network
# Check that networking is up.
# [ ${NETWORKING} = "no" ] && exit 0
unset VNCSERVERARGS
VNCSERVERS=""
[ -f /etc/sysconfig/vncservers ] && . /etc/sysconfig/vncservers
prog=$"VNC server"
start() {
REQ_USER=$2
echo -n $"Starting $prog: "
ulimit -S -c 0 >/dev/null 2>&1
RETVAL=0
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
DISP="${display%%:*}"
export VNCUSERARGS="${VNCSERVERARGS[${DISP}]}"
su ${USER} -c "cd ~${USER} && [ -f .vnc/passwd ] && vncserver :${DISP} ${VNCUSERARGS}"
fi
done
}
stop() {
REQ_USER=$2
echo -n $"Shutting down $prog: "
for display in ${VNCSERVERS}
do
export USER="${display##*:}"
if test -z "${REQ_USER}" -o "${REQ_USER}" == ${USER} ; then
echo -n "${display} "
unset BASH_ENV ENV
export USER="${display##*:}"
su ${USER} -c "vncserver -kill :${display%%:*}" >/dev/null 2>&1
fi
done
echo -e "\n"
echo "Vncserver Stopped"
}
# See how we were called.
case "$1" in
start)
start $@
;;
stop)
stop $@
;;
restart|reload)
stop $@
sleep 3
start $@
;;
condrestart)
if [ -f /var/lock/subsys/vncserver ]; then
stop $@
sleep 3
start $@
fi
;;
status)
status Xvnc
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
# End of vncserver service script
# Make script executable
sudo chmod a+x /etc/init.d/vncserver
# Make script run with default runlevels
sudo update-rc.d vncserver defaults
# You can also install Redhat style chkconfig using
sudo apt-get install chkconfig
# Use below to list service startup statuses
chkconfig --list
service --status-all
# Start and stop service manually
/etc/init.d/vncserver stop
/etc/init.d/vncserver start
or
service vncserver stop
service vncserver start
Method 2 - using Ubuntu/ Debian style Upstart that replaced inittab
After you have installed VNC Server, a Window Manager and configured it do following.
For each of the user or service define similar to following
username@servername:/etc/init$ cat /etc/init/vnc1.conf
description "my VNC Server number 1"
#start on runlevel [2345]
#stop on runlevel [016]
start on (starting network-interface or starting network-manager or starting networking)
stop on runlevel [!023456]
respawn
env USER="username"
export USER
env DISPLAY="1"
env DEPTH="16"
env GEOMETRY="1280x730"
env NAME="mY-VNC-Server"
env OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
pre-start script
. /lib/lsb/init-functions
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
end script
post-stop script
. /lib/lsb/init-functions
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
end script
Run below command to register new processes to start on boot.
sudo initctl reload-configuration
How to restart VNC Upstart Service
sudo initctl start vncserveFor each of the user or service define similar to following
username@servername:/etc/init$ cat /etc/init/vnc1.conf
description "my VNC Server number 1"
#start on runlevel [2345]
#stop on runlevel [016]
start on (starting network-interface or starting network-manager or starting networking)
stop on runlevel [!023456]
respawn
env USER="username"
export USER
env DISPLAY="1"
env DEPTH="16"
env GEOMETRY="1280x730"
env NAME="mY-VNC-Server"
env OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
pre-start script
. /lib/lsb/init-functions
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
end script
post-stop script
. /lib/lsb/init-functions
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
end script
Run below command to register new processes to start on boot.
sudo initctl reload-configuration
How to restart VNC Upstart Service
sudo initctl stop vncserve
Method 3 (old): A single vnc server using service written a while ago - superseded by Method 2
sudo apt-get install vnc4server fluxbox
cat /home/username/.vnc/xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
fluxbox &
# x-window-manager &
username@servername:~/.vnc$sudo apt-get install vnc4server fluxbox
cat /home/username/.vnc/xstartup
#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
fluxbox &
# x-window-manager &
username@servername:/etc/init.d$ cat /etc/init.d/vncserve
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: 3 4 5
# Default-Stop: 0 6
### END INIT INFO
#PATH="$PATH:/usr/X11R6/bin/"
# The Username:Group that will run VNC
export USER="username"
#${RUNAS}
# The display that VNC will use
DISPLAY="1"
# Color depth (between 8 and 32)
DEPTH="16"
# The Desktop geometry to use.
#GEOMETRY="<WIDTH>x<HEIGHT>"
#GEOMETRY="800x600"
#GEOMETRY="1024x768"
GEOMETRY="1280x730"
#GEOMETRY="1280x1024"
# The name that the VNC Desktop will have.
NAME="mY-VNC-Server"
OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;
stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0