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 el dispositivo USB como si estuviera conectado localmente.
| > | **Sugerencia:** | |
Te recomendamos usar la redirección USB cuando la latencia de red sea inferior a 100 milisegundos. No uses la 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 proyecto de código abierto (VHCI)
- Servicio VHCI
- Servicio USB
VHCI de código abierto:
Esta parte de la función de redirección USB desarrolla un sistema general de uso compartido de dispositivos USB a través de una red IP. Consiste en un controlador de kernel de Linux y algunas bibliotecas en modo de usuario que te permiten comunicarte con el controlador de kernel para obtener todos los datos USB. En la implementación de Linux VDA, Citrix reutiliza el controlador de kernel de VHCI. Sin embargo, todas las transferencias de datos USB entre Linux VDA y la aplicación Citrix Workspace se encapsulan en el paquete de protocolo Citrix ICA®.
Servicio VHCI:
El servicio VHCI es un servicio de código abierto proporcionado por 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 representa un módulo de Citrix que gestiona toda la virtualización y las transferencias de datos en el dispositivo USB.
Cómo funciona la redirección USB
Normalmente, si un dispositivo USB se redirige correctamente a Linux VDA, se crean uno o varios nodos de dispositivo en la ruta /dev del sistema. Sin embargo, a veces el dispositivo redirigido no se puede usar para una sesión activa de Linux VDA. Los dispositivos USB dependen de los controladores para funcionar correctamente y algunos dispositivos requieren controladores especiales. Si no se proporcionan controladores, los dispositivos USB redirigidos son inaccesibles para la sesión activa de Linux VDA. Para garantizar la conectividad de los dispositivos USB, instala los controladores y configura el sistema correctamente.
Linux VDA admite una lista de dispositivos USB que se redirigen correctamente hacia y desde el cliente. Además, el dispositivo se monta correctamente, especialmente el disco USB, lo que permite al usuario acceder al disco sin ninguna configuración adicional.
Dispositivos USB compatibles
Se ha verificado que los siguientes dispositivos son compatibles con esta versión de Linux VDA. Otros dispositivos se pueden usar libremente, con resultados inesperados:
| >**Nota:** | | |
| | | |
Linux VDA solo admite protocolos USB 2.0.
| Dispositivo de almacenamiento masivo 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 |
| SanDisk SDCZ80 flash drive | 0781:5580 | FAT32 |
| WD HDD | 1058:10B8 | FAT32 |
| Ratón 3D 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 mediante una directiva de Delivery Controller™. Al configurar la redirección USB para Linux VDA, configura la siguiente directiva y reglas:
- Directiva de redirección de dispositivos USB de cliente
- Reglas de redirección de dispositivos USB de cliente
Habilitar la directiva de redirección USB
En Citrix Studio, habilita (o inhabilita) la redirección de dispositivos USB hacia y desde el cliente (solo para hosts de estaciones de trabajo).
En el cuadro de diálogo Modificar configuración:
- Selecciona Permitido.
- Haz clic en Aceptar.

Establecer reglas de redirección USB
Después de habilitar la directiva de redirección USB, establece las reglas de redirección mediante Citrix Studio especificando qué dispositivos están permitidos (o denegados) en Linux VDA.
En el cuadro de diálogo Reglas de redirección de dispositivos USB de cliente:
- Haz clic en Nuevo para agregar una regla de redirección, o haz clic en Modificar para revisar una regla existente.
- Después de crear (o modificar) una regla, haz clic en Aceptar.

Compilar el 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). Estos módulos forman parte de la distribución de Linux VDA (como parte del paquete RPM). Se compilan a partir de los kernels oficiales de las distribuciones de Linux y se indican en la siguiente tabla:
| Distribución de Linux compatible | Versión del kernel |
|---|---|
| RHEL 8.3 | 4.18.0-240.10.1 |
| RHEL 8.2 | 4.18.0-240.10.1 |
| RHEL 8.1 | 4.18.0-240.10.1 |
| RHEL 7.9 | 3.10.0-1160.11.1 |
| RHEL 7.8 | 3.10.0-1160.11.1 |
| SUSE 12.5 | 4.12.14-122.57.1 |
| Ubuntu 20.04 | 5.4.0-58 |
| Ubuntu 18.04 | 4.15.0-128 |
| Ubuntu 16.04 | 4.4.0-197 |
| Debian 10 | 4.19.0-13 |
Importante:
Si el kernel de tu máquina no es compatible con el controlador compilado para Linux VDA, es posible que el servicio USB no se inicie. En este caso, solo puedes usar la función de redirección USB si compilas tus propios módulos de kernel VHCI.
Verificar si el kernel es coherente con los módulos compilados por Citrix
En la línea de comandos, ejecuta el siguiente comando para verificar si el kernel es coherente:
insmod /opt/Citrix/VDA/lib64/usb-vhci-hcd.ko
<!--NeedCopy-->
Si el comando se ejecuta correctamente, el módulo de kernel se ha cargado correctamente y la versión es coherente con la instalada por Citrix.
Si el comando se ejecuta con errores, el kernel es incoherente con el módulo de Citrix y debe recompilarse.
Recompilar el módulo de kernel VHCI
Si tu módulo de kernel es incoherente con la versión de Citrix, haz lo siguiente:
-
Descarga el código fuente de LVDA del sitio de descargas de Citrix. Selecciona el archivo contenido en la sección “Linux Virtual Delivery Agent (sources).”
-
Descomprime el archivo citrix-linux-vda-sources.zip. Navega hasta linux-vda-souces/vhci-hcd-1.15.tar.bz2 y descomprime los archivos fuente de VHCI usando tar xvf vhci-hcd-1.15.tar.bz2.
-
Compila el módulo de kernel a partir de los archivos de encabezado y el archivo Module.symvers. Usa los siguientes pasos para instalar los archivos de encabezado del kernel y crear Module.symvers según la distribución de Linux adecuada:
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, habrá una carpeta de kernel similar a:
- > /usr/src/kernels/3.10.0-327.10.1.el7.x86\_64 -
En la carpeta /usr/src/kernels/3.10.0-327.10.1.el7.x86_64, verifica que el archivo Module.symvers esté presente. Si este archivo no está en la carpeta, compila el kernel (ejecutando los siguientes comandos en secuencia:
make oldconfig;make prepare;make modules;make) para obtener este archivo o cópialo de /usr/src/kernels/3.10.0-327.10.1.el7.x86_64-obj/x86_64/defaults/module.* -
Ejecuta los siguientes comandos para instalar las herramientas de desarrollo.
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--> -
En el archivo
vhci-hcd-1.15/Makefile, cambia el Makefile de VCHI y establece KDIR en el directorio del kernel:#KDIR = $(BUILD_PREFIX)/lib/modules/$(KVERSION)/build KDIR = /usr/src/kernels/3.10.0-327.10.1.el7.x86_64 <!--NeedCopy--> -
En la carpeta
vhci-hcd-1.15/, ejecutamakepara compilar el kernel VHCI.Nota:
Si la compilación se realizó correctamente, se crean
usb-vhci-hcd.koyusb-vhci-iocifc.koen la carpetavhci-hcd-1.15/. -
Reemplaza el módulo del kernel por el recién compilado: cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/
-
Reinicia el servicio USB:
service ctxusbsd restart <!--NeedCopy--> -
Cierra la sesión y vuelve a iniciarla. Comprueba si la redirección USB funciona.
Solucionar problemas de compilación del kernel
Los siguientes errores pueden ocurrir al compilar el módulo VHCI con kernels específicos:
-
Puede ocurrir el error
implicit declaration of function 'copy\_to\_user', consulta la siguiente captura de pantalla:
El error ocurre debido a cambios en los archivos de encabezado en los kernels. Como solución alternativa, agrega la línea #include <linux/uaccess.h> al archivo
vhci-hcd-1.15/usb-vhci-iocifc.c.
-
Puede ocurrir el error
'driver\_attr\_debug_output' undeclared, consulta la siguiente captura de pantalla:
El error ocurre cuando faltan símbolos en el kernel. Como solución alternativa, deshabilita la definición de macro para DEBUG en los archivos
vhci-hcd-1.15/usb-vhci-iocifc.cyvhci-hcd-1.15/usb-vhci-hcd.c.
-
Puede ocurrir el error
'make[3]: *** No rule to make target 'arch/x86/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop., consulta la siguiente captura de pantalla:
Como solución alternativa, reemplaza
SUBDIRS=$(PWD)porM=$(shell pwd)mediante los siguientes comandos en la rutavhci-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--> -
Puede ocurrir el error
./include/uapi/linux/stat.h:30:17: error: expected ')' before numeric constant#define S_IRUSR 00400, consulta la siguiente captura de pantalla:
Ejecuta los siguientes comandos para solucionar el problema:
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--> -
Puede ocurrir el error
./arch/x86/include/asm/uaccess.h:433:29: error: invalid initializer__typeof__(ptr) __pu_ptr = (ptr); \, consulta la siguiente captura de pantalla:
Como solución alternativa, cambia la línea 219 del archivo
usb-vhci-iocifc.cde__put_user('\0', arg->bus_id);a__put_user('\0', arg->bus_id + 0);. -
Puede ocurrir 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)))), consulta la siguiente captura de pantalla:
Ejecuta los siguientes comandos para solucionar el problema:
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
Usa la información de esta sección para solucionar varios problemas que puedes encontrar al usar el VDA de Linux.
No se puede desmontar el disco USB redirigido
Para el control de acceso de todos los discos USB redirigidos desde la aplicación Citrix Workspace, el VDA de Linux administra todos estos dispositivos con privilegios administrativos para garantizar que solo el propietario pueda acceder al dispositivo redirigido. Como resultado, el usuario no puede desmontar el dispositivo sin privilegios administrativos.

Archivo perdido al detener la redirección de un disco USB
Si rediriges un disco USB a una sesión e intentas modificarlo (por ejemplo, crear algunos archivos en el disco), y luego detienes la redirección inmediatamente usando la barra de herramientas de la aplicación Citrix Workspace, el archivo que modificaste o creaste puede perderse. Este problema ocurre porque cuando escribes datos en un sistema de archivos, el sistema monta la caché de memoria en el sistema de archivos. Los datos no se escriben en el disco en sí. Si detienes la redirección usando la barra de herramientas de la aplicación Citrix Workspace, no queda tiempo para que los datos se vacíen en el disco, lo que resulta en la pérdida de datos. Para resolver este problema, usa el comando sync en un terminal para vaciar los datos en el disco antes de detener la redirección USB.

No hay dispositivos en la barra de herramientas de la aplicación Citrix Workspace
A veces, es posible que no puedas ver los dispositivos enumerados en la barra de herramientas de la aplicación Citrix Workspace, lo que indica que no se está realizando ninguna redirección USB. Si encuentras este problema, verifica lo siguiente:
- La directiva está configurada para permitir la redirección USB.
- El módulo del kernel es compatible con tu kernel.

Nota:
La ficha Dispositivos no está disponible en la aplicación Citrix Workspace para Linux.
Redirección fallida cuando los dispositivos USB se ven en la barra de herramientas de la aplicación Citrix Workspace, pero están etiquetados como policy restricted
Cuando ocurre el problema, haz lo siguiente:
- Configura la directiva del VDA de Linux para habilitar la redirección.
-
Comprueba si hay restricciones de directiva adicionales configuradas en el registro de la aplicación Citrix Workspace. Verifica DeviceRules en la ruta del registro para asegurarte de que el acceso al dispositivo no esté denegado por esta configuración:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA Client\GenericUSB
Un dispositivo USB se redirige correctamente, pero no puedo usarlo en mi sesión
Normalmente, solo se pueden redirigir los dispositivos USB compatibles. Otros dispositivos también pueden redirigirse a una sesión activa del VDA de Linux. Para cada dispositivo redirigido, se crea un nodo propiedad del usuario en la ruta /dev del sistema. Sin embargo, son los controladores y la configuración los que determinan si el usuario puede usar el dispositivo correctamente. Si encuentras un dispositivo que es de tu propiedad (conectado) pero inaccesible, agrega el dispositivo a una directiva sin restricciones.
Nota:
En el caso de las unidades USB, el VDA de Linux configura y monta el disco. El usuario (y solo el propietario que lo instaló) puede acceder al disco sin ninguna configuración adicional. Este podría no ser el caso de los dispositivos que no están en la lista de dispositivos compatibles.