Linux Virtual Delivery Agent 2106

Configurar la redirección USB

Los dispositivos USB se comparten entre la aplicación Citrix Workspace y el escritorio de Linux VDA. Cuando un dispositivo USB se redirige al escritorio, el usuario puede usar ese dispositivo como si estuviera conectado localmente.

Consejo:

Se recomienda utilizar redirección USB cuando la latencia de red es inferior a 100 milisegundos. No utilice redirección USB cuando la latencia de red sea superior a 200 milisegundos.

La redirección USB incluye tres áreas principales de funcionalidad:

  • Implementación de proyectos de código abierto (VHCI)
  • Servicio VHCI
  • Servicio USB

VHCI de código abierto:

Esta parte de la redirección USB desarrolla un sistema general para compartir dispositivos USB a través de una red IP. Se compone de un controlador de kernel Linux y algunas bibliotecas de modo usuario, que le permiten comunicarse con el controlador del kernel para obtener todos los datos de USB. En la implementación de Linux VDA, Citrix reutiliza el controlador del kernel de VHCI. Todas las transferencias de datos USB que se realizan entre el Linux VDA y la aplicación Citrix Workspace se encapsulan en el paquete del protocolo ICA de Citrix.

Servicio VHCI:

El servicio VHCI es un servicio de código abierto que proporciona Citrix para comunicarse con el módulo de kernel VHCI. Este servicio funciona como una puerta de enlace entre VHCI y el servicio USB de Citrix.

Servicio USB:

El servicio USB de Citrix representa un módulo que administra la virtualización y las transferencias de datos en el dispositivo USB.

Cómo funciona la redirección USB

Por lo general, si un dispositivo USB se redirige correctamente a Linux VDA, se crean uno o varios nodos de dispositivos en la ruta /dev del sistema. Sin embargo, hay veces en que el dispositivo redirigido no puede utilizarse para una sesión activa de Linux VDA. Los dispositivos USB necesitan los controladores pertinentes para poder funcionar correctamente; algunos dispositivos requieren incluso controladores especiales. Por eso, si no se proporcionan los controladores adecuados, los dispositivos USB redirigidos resultan inaccesibles para una sesión activa de Linux VDA. Para garantizar la conectividad del dispositivo USB, instale los controladores y configure el sistema correctamente.

Linux VDA admite una lista de dispositivos USB que se redirigen correctamente a y desde el cliente. Además, el dispositivo se monta correctamente (sobre todo el disco USB), lo que permite a los usuarios acceder al disco sin ninguna configuración adicional.

Dispositivos USB admitidos

Se ha comprobado que los dispositivos siguientes admiten esta versión de VDA para Linux. Los demás dispositivos se pueden usar libremente, pero con resultados inesperados:

Nota:

Linux VDA solo admite protocolos USB 2.0.

Dispositivos de almacenamiento USB VID:PID Sistema de archivos
Netac Technology Co., Ltd 0dd8:173c FAT32
Kingston Datatraveler 101 II 0951:1625 FAT32
Kingston Datatraveler GT101 G2 1567:8902 FAT32
Unidad flash SanDisk SDCZ80 0781:5580 FAT32
WD HDD 1058:10B8 FAT32
Mouse 3D por USB VID:PID
3DConnexion SpaceMouse Pro 046d: c62b
Escáner USB VID:PID
Epson Perfection V330 Photo 04B8: 0142

Configurar la redirección USB

Una directiva de Citrix controla si la redirección de dispositivos USB está habilitada o inhabilitada. Además, el tipo de dispositivo también se puede especificar con una directiva de Delivery Controller. Cuando configure la redirección USB para Linux VDA, defina la directiva y las reglas siguientes:

  • Directiva de Redirección de dispositivos USB del cliente
  • Reglas de redirección de dispositivos USB del cliente

Habilitar la directiva de redirección USB

En Citrix Studio, habilite (o inhabilite) la redirección de dispositivos USB desde y hacia el cliente (solo para hosts de estación de trabajo).

En el diálogo Modificar configuración:

  1. Seleccione la opción Permitido.
  2. Haga clic en Aceptar.

Imagen sobre cómo habilitar redirección USB

Configurar reglas de redirección USB

Después de habilitar la directiva de redirección USB, configure las reglas de redirección mediante Citrix Studio. Para ello, deberá especificar los dispositivos permitidos (o denegados) en el Linux VDA.

En el cuadro de diálogo Reglas de redirección de dispositivos USB del cliente:

  1. Haga clic en Nueva para agregar una regla de redirección, o bien haga clic en Modificar para revisar una regla existente.
  2. Después de crear o modificar una regla, haga clic en Aceptar.

Imagen del parámetro reglas de redirección de dispositivos USB del cliente

Para obtener más información sobre la configuración de la redirección de USB genérico, consulte Citrix Generic USB Redirection Configuration Guide.

Compilación del módulo de kernel VHCI

La redirección USB depende de los módulos de kernel VHCI (usb-vhci-hcd.ko y usb-vhci-iocif.ko). Esos módulos forman parte de la distribución de Linux VDA (como parte del paquete RPM). Se compilan en función de los kernels de la distribución oficial de Linux y se indican en la siguiente tabla:

Distribución compatible de Linux Versión de kernel
RHEL 8.3 4.18.0-240
RHEL 8.2 4.18.0-240
RHEL 8.1 4.18.0-240
RHEL 7.9 3.10.0-1160
RHEL 7.8 3.10.0-1160
SUSE 12.5 4.12.14
Ubuntu 20.04 5.4.0-70
Ubuntu 18.04 4.15.0-140
Ubuntu 16.04 4.4.0-206
Debian 10 4.19.0-16

Importante:

Si el kernel de la máquina no es compatible con el controlador creado para Linux VDA, es posible que el servicio USB no se inicie. En este caso, puede utilizar la funcionalidad Redirección USB solamente si compila sus propios módulos de kernel VHCI.

Compruebe si el kernel es coherente con los módulos generados por Citrix

En la línea de comandos, ejecute el siguiente comando para comprobar si el kernel es coherente:

insmod /opt/Citrix/VDA/lib64/usb-vhci-hcd.ko
<!--NeedCopy-->

Si el comando se ejecuta correctamente, el módulo del kernel se ha cargado correctamente y la versión es coherente con la instalada por Citrix.

Si el comando se ejecuta con errores, significa que el kernel no es coherente con el módulo de Citrix y se debe volver a generar.

Recompilación del módulo de kernel VHCI

Si el módulo de kernel no corresponde a la versión de Citrix, lleve a cabo lo siguiente:

  1. Descargue el código fuente de LVDA desde el sitio de descargas de Citrix. Seleccione el archivo incluido en la sección “Linux Virtual Delivery Agent (orígenes)”.

  2. Descomprima el archivo citrix-linux-vda-sources.zip. Vaya a linux-vda-sources/vhci-hcd-1.15.tar.bz2 y descomprima los archivos de origen VHCI mediante tar xvf vhci-hcd-1.15.tar.bz2.

  3. Compile el módulo de kernel en función de los archivos de encabezado y del archivo Module.symvers. Siga estos pasos para instalar los archivos de encabezado del kernel y crear Module.symvers en función de la distribución pertinente de Linux:

    RHEL/CentOS:

    yum install kernel-devel
    <!--NeedCopy-->
    

    SUSE 12:

    zypper install kernel-devel
    
    zypper install kernel-source
    <!--NeedCopy-->
    

    Ubuntu:

    apt-get install linux-headers
    <!--NeedCopy-->
    

    Sugerencia:

    Si la instalación se realiza correctamente, se creará una carpeta de kernel como:

    /usr/src/kernels/3.10.0-327.10.1.el7.x86_64

  4. En la carpeta /usr/src/kernels/3.10.0-327.10.1.el7.x86_64, verifique que el archivo Module.symvers está presente. Si este archivo no está en la carpeta, compile el kernel (ejecutando los comandos siguientes en secuencia: make oldconfig; make prepare; make modules; make) para obtenerlo o cópielo desde /usr/src/kernels/3.10.0-327.10.1.el7.x86_64-obj/x86_64/defaults/module.*

  5. Ejecute los siguientes comandos para instalar las herramientas de desarrollador.

    RHEL 8, CentOS 8:

    yum groupinstall 'Development Tools'
    
    yum install elfutils-libelf-devel
    <!--NeedCopy-->
    

    RHEL 7, CentOS 7:

    yum groupinstall 'Development Tools'
    <!--NeedCopy-->
    

    Ubuntu 20.04, Ubuntu 18.04, Debian 10:

    apt install build-essential flex bison libelf-dev
    <!--NeedCopy-->
    

    Ubuntu 16.04:

    apt install build-essential flex bison
    
    <!--NeedCopy-->
    
  6. En el archivo vhci-hcd-1.15/Makefile, cambie el archivo Make de VCHI y defina KDIR con el directorio de kernel:

    #KDIR = $(BUILD_PREFIX)/lib/modules/$(KVERSION)/build
    
    KDIR = /usr/src/kernels/3.10.0-327.10.1.el7.x86_64
    <!--NeedCopy-->
    
  7. En la carpeta vhci-hcd-1.15/, ejecute make para crear el kernel de VHCI.

    Nota:

    Si la compilación es correcta, usb-vhci-hcd.ko y usb-vhci-iocifc.ko se crean en la carpeta vhci-hcd-1.15/.

  8. Reemplace el módulo de kernel con el recién compilado: cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/

  9. Reinicie el servicio USB:

    service ctxusbsd restart
    <!--NeedCopy-->
    
  10. Cierre la sesión y vuelva a iniciarla. Compruebe si la redirección USB está funcionando.

Solucionar problemas con la generación de kernels

Es posible que se produzcan los siguientes errores al crear el módulo VHCI con kernels específicos:

  • Es posible que se produzca el error implicit declaration of function 'copy\_to\_user'; en ese caso, consulte la siguiente captura de pantalla:

    Imagen del error "implicit declaration of function"

    El error ocurre debido a cambios en el archivo de encabezado en los kernels. Como solución temporal, agregue la línea #include <linux/uaccess.h> al archivo vhci-hcd-1.15/usb-vhci-iocifc.c.

    Imagen de agregar una línea para solucionar un error de generación para kernel

  • Es posible que se produzca el error 'driver\_attr\_debug_output' undeclared; en ese caso, consulte la siguiente captura de pantalla:

    Imagen del error de generación para kernels "undeclared"

    El error se produce cuando faltan símbolos en el kernel. Como solución temporal, inhabilite la definición macro para DEPURAR en los archivos vhci-hcd-1.15/usb-vhci-iocifc.c y vhci-hcd-1.15/usb-vhci-hcd.c.

    Imagen en la que se inhabilita una macro

  • Es posible que se produzca el error 'make[3]: *** No rule to make target 'arch/x86/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop.; en ese caso, consulte la siguiente captura de pantalla:

    Imagen de un error al generar kernels

    Como solución temporal, reemplace SUBDIRS=$(PWD) por M=$(shell pwd) mediante los siguientes comandos en la ruta vhci-hcd-1.15/:

     sed -i 's/SUBDIRS=$(PWD)/M=$(shell pwd)/g' Makefile
    
     sed -i 's/SUBDIRS=$(PWD)/M=$(shell pwd)/g' test/Makefile
     <!--NeedCopy-->
    
  • Es posible que se produzca el error ./include/uapi/linux/stat.h:30:17: error: expected ')' before numeric constant
    #define S_IRUSR 00400; en ese caso, consulte la siguiente captura de pantalla:

    Image of a kernel building error

    Run the following commands to work around the issue:

     sed -i 's/show_debug_output/debug_output_show/g' usb-vhci-iocifc.c usb-vhci-hcd.c  
    
     sed -i 's/store_debug_output/debug_output_store/g' usb-vhci-iocifc.c usb-vhci-hcd.c  
    
     sed -i 's/static DRIVER_ATTR(debug_output, S_IRUSR | S_IWUSR, debug_output_show, debug_output_store);/static DRIVER_ATTR_RW(debug_output);/g' usb-vhci-iocifc.c usb-vhci-hcd.c
     <!--NeedCopy-->
    
  • Es posible que se produzca el error ./arch/x86/include/asm/uaccess.h:433:29: error: invalid initializer __typeof__(ptr) __pu_ptr = (ptr); \; en ese caso, consulte la siguiente captura de pantalla:

    Image of a kernel building error

    As a workaround, change the 219 line of the usb-vhci-iocifc.c file from __put_user('\0', arg->bus_id); to __put_user('\0', arg->bus_id + 0);.

  • Es posible que se produzca el error error: 'access_ok' undeclared (first use in this function)
    if(unlikely((_IOC_DIR(cmd) & _IOC_READ) && !access_ok(VERIFY_WRITE, arg, _IOC_SIZE(cmd)))); en ese caso, consulte la siguiente captura de pantalla:

    Image of a kernel building error

    Run the following commands to work around the issue:

     sed -i 's/VERIFY_READ, //g' usb-vhci-iocifc.c  
     sed -i 's/VERIFY_WRITE, //g' usb-vhci-iocifc.c
     <!--NeedCopy-->
    

Solucionar problemas de redirección USB

Use la información de esta sección para solucionar problemas que puedan surgir al usar Linux VDA.

No se puede desmontar el disco USB redirigido

Para controlar el acceso a todos los discos USB redirigidos desde la aplicación Citrix Workspace, Linux VDA administra todos esos dispositivos con privilegios administrativos para que solo el propietario pueda acceder al dispositivo redirigido. Por eso, el usuario no puede desmontar el dispositivo sin privilegios administrativos.

Imagen de "no se puede desmontar un dispositivo"

Se pierde el archivo cuando se detiene la redirección de un disco USB

Si redirige un disco USB a una sesión y lo modifica (por ejemplo, crea archivos en él) y, justo después, detiene la redirección en la barra de herramientas de la aplicación Citrix Workspace, el archivo modificado (o creado) se puede perder. Este problema se produce porque, cuando escribe datos en un sistema de archivos, el sistema monta la memoria caché en el sistema de esos archivos. Los datos no se escriben en el disco en sí. Si deja de redirigir el dispositivo desde la barra de herramientas de la aplicación Citrix Workspace, no hay tiempo para que los datos se vuelquen en el disco, por lo que se pierden. Para resolver este problema, use el comando sync en un terminal para vaciar datos en el disco antes de detener la redirección USB.

Imagen del archivo que se pierde cuando se detiene la redirección de un disco USB

No hay ningún dispositivo en la barra de herramientas de la aplicación Citrix Workspace

En algunos casos, puede que no aparezcan dispositivos en la barra de herramientas de la aplicación Citrix Workspace, lo que indica que no se está realizando la redirección USB. Si tiene este problema, compruebe lo siguiente:

  • La directiva está configurada para permitir la redirección USB
  • El módulo Kernel es compatible con su kernel

La ficha Dispositivos en la barra de herramientas de la aplicación Citrix Workspace

Nota:

La ficha Dispositivos no está disponible en la aplicación Citrix Workspace para Linux.

Los dispositivos USB se ven en la barra de herramientas de la aplicación Citrix Workspace, pero tienen la etiqueta de restringidos por directiva, lo que provoca un error de redirección

Cuando ocurra el problema, haga lo siguiente:

  • Configure la directiva de Linux VDA para habilitar la redirección
  • Compruebe que no se hayan configurado directivas adicionales en el Registro de la aplicación Citrix Workspace. Busque DeviceRules en la ruta del Registro para asegurarse de que este parámetro no esté denegando el acceso a su dispositivo.

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA Client\GenericUSB

El dispositivo USB se redirige correctamente, pero no lo puedo usar en mi sesión

Normalmente, solo se pueden redirigir los dispositivos USB admitidos. También es posible que otros tipos de dispositivos se redirijan a una sesión activa de Linux VDA. Por cada dispositivo redirigido, se crea en la ruta /dev del sistema un nodo cuyo propietario es el usuario. Sin embargo, son los controladores y la configuración los que determinan si el usuario puede usar el dispositivo. Si hay un dispositivo conectado pero inaccesible, agréguelo a una directiva sin restricciones.

Nota:

En el caso de unidades USB, Linux VDA configura y monta el disco. El usuario (y solo el propietario que lo instaló) puede acceder al disco sin ninguna configuración adicional. Puede que no sea el caso para dispositivos que no consten en la lista de los dispositivos admitidos.

Configurar la redirección USB