How to use Ubuntu 18.04 on VNC without display attached?

I know that there are previous topics on this issue, but most of them focuses on other versions, which have different configuration options or try to solve it by installing Xfce or other custom display manager.

I want to use my computer as a home server, but I like to connect to it and access the default graphical interface on VNC. I use vino for the VNC.

When a display is attached, I can access the computer fine. When it is missing I can also connect, but only get an empty X (?) screen with a cursor and Gnome isn’t running.

xrandr says Can’t open display. How can I add a virtual display to be used and shared among multiple remote sessions?


Solution 1:

https://launchpad.net/ubuntu/bionic/+source/xserver-xorg-video-dummy

sudo apt-get install xserver-xorg-video-dummy

How to use: Add Fake Display when No Monitor is Plugged In

Solution 2:

This is how I solved it: I've created the virtual display using the answer to this question: https://unix.stackexchange.com/questions/378373/add-virtual-output-to-xorg

Create a 20-intel.conf file:

sudo vi /usr/share/X11/xorg.conf.d/20-intel.conf

Add the following configuration information into the file:

Section "Device"
    Identifier "intelgpu0"
    Driver "intel"
    Option "VirtualHeads" "2"
EndSection

This tells the Intel GPU to create 2 virtual displays. You can change the number of VirtualHeads to your needs.

Then I made a shell script (don't forget to set executable) and put that in Startup Applications:

#! /bin/bash

/usr/bin/xrandr -d :0 --output VIRTUAL1 --primary --auto
/usr/bin/xrandr --newmode "1600x900_60.00" 118.25 1600 1696 1856 2112 900$
/usr/bin/xrandr --addmode VIRTUAL1 "1600x900_60.00"
/usr/bin/xrandr

That way, VIRTUAL1 is set as output and connected. At boot, a new mode (found using "cvt 1600 900") is being created and appointed to VIRTUAL1.

Only issue with this is: dock is missing at reboot... Haven't solved that yet.

Solution 3:

I tried all the suggestions to use a dummy script. It worked but only if i NEVER wanted to use a monitor attached directly to my PC. If you want remote desktop, as well as the option of a real monitor, the only solution I could find was an HDMI Pass-Through EDID Emulator. I plugged it in and everything worked seamlessly. About $20 from amazon: https://smile.amazon.com/gp/product/B07C8BHPD6/

Solution 4:

If you're using x11vnc, use the flag "-create" to create a virtual frame buffer using Xvfb if a display is not found. It will be 1280x1024 8-bit by default. Using "-env X11VNC_CREATE_GEOM=${1:-1024x768x16}", you can specify alternative display geometries.

There are other flags available for xvnc and xdummy (-xvnc and -xdummy)

More advanced options can also be configured. See this answer for a strong implementation: https://stackoverflow.com/a/40678605/848419