Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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 (smile)

The following steps are tested on Ubuntu Server 20.04


Install a basic GUI, a VNC server and some necessary utilities

Code Block
$ sudo apt install gnome-session x11vnc xinit


Disable gdm3 and set default target

Code Block
$ sudo systemctl disable gdm3.service
$ sudo systemctl set-default multi-user.target


Configure x11vnc to autostart with the gnome-session

Code Block
$ 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

Code Block
$ 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

Code Block
$ 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

Code Block
$ cat << EOF >> ~/.bashrc
if [ -z "${DISPLAY}" ] && [[ "${XDG_VTNR}" -eq 1 ]]; then
  exec startx
fi
EOF