Linux Virtual Delivery Agent

Non-virtualized GPUs

In the Linux VDA documentation, non-virtualized GPUs refers to:

  • GPUs used in Remote PC Access scenarios
  • GPUs passed through from a hypervisor

This article provides information on enabling HDX 3D Pro for non-virtualized GPUs.

Prerequisites

  • Enable HDX 3D Pro. To do so, set CTX_XDL_HDX_3D_PRO to Y when installing the Linux VDA. For information about environment variables, see Step 8: Set up the runtime environment to complete the installation.
  • For GPUs that the NVIDIA Linux Capture SDK supports, hardware acceleration is enabled by default after you enable HDX 3D Pro. No additional configuration is required.
  • For GPUs that the NVIDIA Linux Capture SDK does not support, install XDamage. For example, you can run sudo apt-get install -y libxdamage1 to install XDamage on Ubuntu 20.04. Typically, XDamage exists as an extension of XServer.

Configuration

Modify Xorg configuration files

For NVIDIA non-virtualized GPUs

The configuration files are installed and set automatically.

For other GPUs

You must modify the four template configuration files installed under /etc/X11/:

  • ctx-driver_name-1.conf
  • ctx-driver_name-2.conf
  • ctx-driver_name-3.conf
  • ctx-driver_name-4.conf

Using ctx-driver_name-1.conf as an example, do the following to modify the template configuration files:

  1. Replace driver_name with your actual driver name.

    For example, if your driver name is intel, you can change the configuration file name to ctx-intel-1.conf.

  2. Add the video driver information.

    Each template configuration file contains a section named “Device,” which is commented out. This section describes the video driver information. Enable this section before adding your video driver information. To enable this section:

    1. See the guide provided by the GPU manufacturer for configuration information. A native configuration file can be generated. Verify that your GPU can work in a local environment with the native configuration file.

    2. Copy the “Device” section of the native configuration file to ctx-driver_name-1.conf.

  3. Run the following command to set the registry key so that the Linux VDA can recognize the configuration file name set in Step 1.

    /opt/Citrix/VDA/bin/ctxreg create -k "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Citrix\XDamage" -t "REG_SZ" -v "DriverName" -d "intel" --force
    <!--NeedCopy-->
    

Enable XDamage

If you are using a GPU that is not listed in the supported hardware section of the release notes for NVIDIA Linux Capture SDK, enable XDamage using:

/opt/Citrix/VDA/bin/ctxreg create -k "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Citrix\XDamage" -t "REG_DWORD" -v "XDamageEnabled" -d "0x00000001" --force
<!--NeedCopy-->

Monitor blanking for Remote PC Access VDAs

The Linux VDA supports physical monitor blanking for Remote PC Access VDAs that use non-virtualized GPUs.

Fully tested Linux distributions that support the feature include Ubuntu 20.04 and Debian 11.3.

The feature is disabled by default. To enable it, complete the following two steps:

  1. Install the evdi-dkms package based on your Linux distribution:

    sudo apt install evdi-dkms
    <!--NeedCopy-->
    
  2. Enable graphics display offloading to EVDI:

    /opt/Citrix/VDA/bin/ctxreg create -k "HKLM\System\CurrentControlSet\Control\Citrix\Thinwire" -t "REG_DWORD" -v "Evdi" -d "0x00000001" --force
    <!--NeedCopy-->
    
  3. If you are using an Intel GPU, disable the display manager. Otherwise, the Intel GPU is occupied by the display manager and not available for Citrix remote sessions.

    sudo systemctl disable --now gdm
    <!--NeedCopy-->
    

Troubleshooting

No or garbled graphic output

If you can run 3D applications locally and all configurations are correct, missing or garbled graphic output is the result of a bug. Use /opt/Citrix/VDA/bin/setlog and set GFX_X11 to verbose to collect the trace information for debugging.

Hardware encoding does not work

If you use Xdamage, only software encoding is supported.

Non-virtualized GPUs