# GPU Acceleration KasmVNC utilizes its own [Xorg](https://www.x.org/wiki/) server with a virtual frame buffer running in Linux userspace. This means a KasmVNC session is not identical to a standard desktop X session and also that KasmVNC can be run on a headless Linux server. In order to leverage a GPU for OpenGL and 3D applications, specific flags need to be set in the [KasmVNC Configuration YAML](../configuration.md) or using command line flags. ```{note} Applications that use a GPU for compute like transcoding or Deep Learning do not require any additional configuration, these will run normally without any of these flags being passed and are not limited by the compatibilty notes below. ``` ## Compatibility and DRI3 ### Driver Support As a general rule of thumb [DRI3](https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure#DRI3) support is limited to fully open source drivers on x86_64 platforms. This includes: | Driver | Description | |---------|------------| | Intel | i965 and i915 drivers for Intel iGPU chipsets | | AMD | AMDGPU, Radeon, and ATI drivers for AMD dedicated or APU chipsets | | NVIDIA | nouveau2 drivers only, closed source NVIDIA drivers lack DRI3 support | ```{note} Most AArch64 based GPUs should also work given they have DRI3 compatibilty and the driver is installed. ``` ### Tested Operating Systems The following operating systems have been confirmed functional using open source GPU drivers with DRI3 and releases from [KasmVNC Releases](https://github.com/kasmtech/KasmVNC/releases): | OS | HomePage | |---------|------------| | AlmaLinux 8 | [https://almalinux.org/](https://almalinux.org/) | | AlmaLinux 9 | [https://almalinux.org/](https://almalinux.org/) | | Alpine 3.17 | [https://www.alpinelinux.org/](https://www.alpinelinux.org/) | | Alpine 3.18 | [https://www.alpinelinux.org/](https://www.alpinelinux.org/) | | Alpine 3.19 | [https://www.alpinelinux.org/](https://www.alpinelinux.org/) | | Debian Bullseye | [https://www.debian.org/](https://www.debian.org/) | | Debian Bookworm | [https://www.debian.org/](https://www.debian.org/) | | Fedora 37 | [https://getfedora.org/](https://getfedora.org/) | | Fedora 38 | [https://getfedora.org/](https://getfedora.org/) | | Fedora 39 | [https://getfedora.org/](https://getfedora.org/) | | Kali Linux Rolling | [https://www.kali.org/](https://www.kali.org/) | | openSUSE Leap 15 | [https://www.opensuse.org/](https://www.opensuse.org/) | | Oracle Linux 8 | [https://www.oracle.com/linux/](https://www.oracle.com/linux/) | | Oracle Linux 9 | [https://www.oracle.com/linux/](https://www.oracle.com/linux/) | | ParrotOS 5 | [https://www.parrotsec.org/](https://www.parrotsec.org/) | | Rocky Linux 8 | [https://rockylinux.org/](https://rockylinux.org/) | | Rocky Linux 9 | [https://rockylinux.org/](https://rockylinux.org/) | | Ubuntu Bionic | [https://ubuntu.com/](https://ubuntu.com/) | | Ubuntu Focal | [https://ubuntu.com/](https://ubuntu.com/) | | Ubuntu Jammy | [https://ubuntu.com/](https://ubuntu.com/) | ### Desktop Compositing Currently Desktop compositing is not supported using DRI3, in general we recommend disabling desktop compositing when using KasmVNC. Most Desktops have an option to disable this in their window manager settings with the exception of [GNOME](https://www.gnome.org/) meaning GNOME is forced to consume more CPU leveraging [LLVMpipe](https://docs.mesa3d.org/drivers/llvmpipe.html) for rendering. | Desktop Environment | Compositing Setting | |---------|------------| | XFCE | Settings Manager > Window Manager Tweaks > Compositor > Enable display compositing | | KDE | System Settings > Display and Monitor > Compositor > Enable on startup | | MATE | System > Control Center > Windows > Enable software compositing window manager | | GNOME | Disabling not supported | ## Enabling GPU Acceleration in KasmVNC When starting KasmVNC the cli flag `-hw3d` will enable DRI3 support and use the GPU `/dev/dri/renderD128` by default. For most users this should be sufficiant. If the system has multiple GPUs you may need to manually select a GPU using the `-drinode` option. IE: ``` vncserver -hw3d -drinode /dev/dri/renderD128 ``` This can also be configured in `/etc/kasmvnc/kasmvnc.yaml` using: ```yaml desktop: gpu: hw3d: true drinode: /dev/dri/renderD128 ``` For more information on configuration please check [HERE](../configuration.md) ### Determining which video device to use On multi GPU systems you will need to determine which card to pass to the `-drinode` configuration parameter. This can be achieved using different tools the easiest being to follow file linking if you only need to determine which card is using what driver: ``` ls -l /sys/class/drm/renderD*/device/driver | awk '{print $9,$11}' /sys/class/drm/renderD128/device/driver ../../../bus/pci/drivers/i915 /sys/class/drm/renderD129/device/driver ../../../../bus/pci/drivers/nvidia /sys/class/drm/renderD130/device/driver ../../../../bus/pci/drivers/amdgpu ``` This is useful for systems that have an integrated GPU and a discrete card. If you have multiple GPUs of the same manufacturer or driver you will need to manually parse through to determine which is which: ``` ls -l /dev/dri/by-path/*-render | awk '{print $9,$11}' /dev/dri/by-path/pci-0000:04:00.0-render ../renderD128 ``` Use the resulting pci id: (in this case 04:00.0) ``` sudo lspci |grep 04:00.0 04:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Rembrandt (rev c7) ``` There is no bulletproof way to identify cards that are identical, but in general PCI Express IDs will go from lowest to highest being closest to farthest from the CPU on the motherboard of your system.