can't start x11vnc without attached monitor

I came up with following solution:

  1. sudo apt-get install x11vnc xserver-xorg-video-dummy
  2. check /etc/default/grub that it includes nomodeset flag:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

  3. Create (or modify) /etc/X11/xorg.conf, modify USER and LISTEN address according to your settings.

Section "Monitor"
Identifier "Monitor0"
HorizSync 28.0-80.0
VertRefresh 48.0-75.0
# 1680x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz
Modeline "1680x1050_60.00" 147.14 1680 1784 1968 2256 1050 1051 1054 1087 -HSync +Vsync
EndSection

Section "Device"
  Identifier "Card0"
  Driver "dummy"
  VideoRam 256000
EndSection

Section "Screen"
DefaultDepth 24
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
    SubSection "Display"
    Depth 24
    Modes "1680x1050"    
    EndSubSection
EndSection

You can generate your own resolution.

4 - create service script in /etc/init.d/vncserver

#!/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/" CMD="/usr/bin/x11vnc"

# The Username:Group that will run VNC 
export USER="your_username"

# 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="1680x1050"
#GEOMETRY="1280x1024"

# The name that the VNC Desktop will have. NAME="my-vnc-server"

PORT=5900 
LISTEN="192.168.1.10"


OPTIONS="-xkb -noxrecord -noxfixes -noxdamage -listen ${LISTEN} -name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -auth guess
-usepw ~/.vnc/passwd -rfbport ${PORT} -forever -bg -oa /var/log/x11vnc.log"

. /lib/lsb/init-functions

case "$1" in start) echo ${OPTIONS} log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "${CMD} ${OPTIONS}" ;;

stop) log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}" su ${USER} -c "${CMD} -kill :${DISPLAY}" ;;

restart) $0 stop $0 start ;; esac

exit 0