In some scenarios, you might want to have a GUI on your GPU accelrated instance. VNC is typically the way to go, when you want a remote desktop connection to a Linux-based computer. Actullay getting a GPU accelrated VNC session is not very straightforward, but if you follow these instructions carefully; it can be done
The following steps are tested on Ubuntu Server 20.04
Install a basic GUI, a VNC server and some necessary utilities
$ sudo apt install gnome-session x11vnc xinit
Disable gdm3 and set default target
$ sudo systemctl disable gdm3.service $ sudo systemctl set-default multi-user.target
Configure x11vnc to autostart with the gnome-session
$ mkdir ~/.config/autostart $ cat << EOF > ~/.config/autostart/2x11vnc.desktop [Desktop Entry] Name=X11VNC Server Comment=Share this desktop by VNC Exec=x11vnc -localhost -forever -shared -ncache Icon=computer Terminal=false Type=Application StartupNotify=false Categories=Network;RemoteAccess; Keywords=VNC;Server;Screencast EOF
Tell getty to autologin the ubuntu-user
$ sudo /etc/systemd/system/getty@tty1.service.d/ $ sudo cat << EOF > /etc/systemd/system/getty@tty1.service.d/2override.conf [Service] ExecStart= ExecStart=-/sbin/agetty --autologin ubuntu --noclear %I $TERM EOF $ sudo systemctl enable getty@tty1.service
Generate config for X
$ sudo nvidia-xconfig --query-gpu-info # Take note of the value of "PCI BusID" $ sudo nvidia-xconfig --busid="<busid from before>" --use-display-device=none # This will generate a xorg.conf that almost works. In order to _actually_ make it work, open /etc/X11/xorg.conf in your favourite editor and do the following: - Remove the entire Section "Monitor" block - In the Section "Screen" block remove the following: Option "UseDisplayDevice" "none" Monitor "Monitor0" SubSection "Display" Depth 24 EndSubSection - In the Section "Screen" block, add: Option "AllowEmptyInitialConfiguration" "True"
Ensure that the X server starts on boot, and only when doing an interactive logon
$ cat << EOF >> ~/.bashrc if [ -z "${DISPLAY}" ] && [[ "${XDG_VTNR}" -eq 1 ]]; then exec startx fi EOF