Linux Virtual Delivery Agent 2103

Configurer la redirection USB

Les périphériques USB sont partagés entre l’application Citrix Workspace et le bureau Linux VDA. Lorsqu’un périphérique USB a été redirigé sur le bureau, l’utilisateur peut utiliser le périphérique USB comme s’il était connecté localement.

Conseil :

Nous vous recommandons d’utiliser la redirection USB lorsque la latence réseau est inférieure à 100 millisecondes. N’utilisez pas la redirection USB lorsque la latence réseau est supérieure à 200 millisecondes.

La redirection USB contient trois domaines de fonctionnalité :

  • Open Source Project Implementation (VHCI)
  • Service VHCI
  • Service USB

Open-source VHCI :

Cette partie de la fonctionnalité de redirection USB développe un système de partage de périphérique USB général sur un réseau IP. Elle comprend un pilote noyau Linux et des bibliothèques en mode utilisateur, ce qui vous permet de communiquer avec le pilote noyau pour obtenir toutes les données USB. Dans la mise en œuvre du Linux VDA, Citrix réutilise le pilote noyau de VHCI. Toutefois tous les transferts de données USB entre le Linux VDA et l’application Citrix Workspace sont encapsulés dans le protocole ICA de Citrix.

Service VHCI :

Le service VHCI est un service open source fourni par Citrix pour communiquer avec le module noyau VHCI. Ce service fonctionne en tant que passerelle entre VHCI et le service USB Citrix.

Service USB :

Le service USB représente un module Citrix qui gère tous les transferts de données et de virtualisation sur le périphérique USB.

Fonctionnement de la redirection USB

En général, si un périphérique USB n’est pas redirigé correctement vers Linux VDA, un ou plusieurs nœuds de périphérique sont créés dans le chemin d’accès system/dev. Parfois, cependant, le périphérique redirigé ne peut pas être utilisé par une session Linux VDA active. Les périphériques USB s’appuient sur les pilotes pour fonctionner correctement et certains périphériques nécessitent des pilotes spéciaux. Si les pilotes ne sont pas fournis, les périphériques USB redirigés sont inaccessibles à la session Linux VDA active. Pour assurer la connectivité du périphérique USB, installez les pilotes et configurez le système correctement.

Le Linux VDA prend en charge une liste de périphériques USB qui peuvent être redirigés vers et depuis le client. En outre, le périphérique est correctement monté, notamment le disque USB, ce qui permet à l’utilisateur d’accéder au disque sans aucune configuration supplémentaire.

Périphériques USB pris en charge

Les périphériques suivants ont été testés pour prendre en charge cette version de Linux VDA. D’autres périphériques peuvent être utilisés, avec des résultats imprévisibles :

Remarque :

le VDA Linux ne prend en charge que les protocoles USB 2.0.

Périphérique de stockage de masse USB VID:PID Système de fichiers
Netac Technology Co., Ltd 0dd8:173c FAT32
Kingston Datatraveler 101 II 0951:1625 FAT32
Kingston Datatraveler GT101 G2 1567:8902 FAT32
Lecteur Flash SanDisk SDCZ80 0781:5580 FAT32
Disque dur HDD WD 1058:10B8 FAT32
Souris 3D USB VID:PID
3DConnexion SpaceMouse Pro 046d: c62b
Scanner USB VID:PID
Photo Epson Perfection V330 04B8: 0142

Configurer la redirection USB

Une stratégie Citrix détermine si la redirection de périphérique USB est activée ou désactivée. En outre, le type de périphérique peut également être spécifié à l’aide d’une stratégie Delivery Controller. Lors de la configuration de la redirection USB pour les Linux VDA, configurez les stratégies et règles suivantes :

  • Stratégie de redirection de périphérique USB client
  • Règles de redirection des périphériques USB clients

Activer la stratégie de redirection USB

Dans Citrix Studio, activez (ou désactivez) la redirection de périphérique USB vers et depuis le client (hôtes de station de travail uniquement).

Dans la boîte de dialogue Modifier le paramètre :

  1. Sélectionnez Autorisé.
  2. Cliquez sur OK.

Image de l'activation de la redirection USB

Définir des règles de redirection USB

Après activation de la stratégie de redirection USB, définissez les règles de redirection à l’aide de Citrix Studio en spécifiant les périphériques qui sont autorisés (ou interdits) sur le Linux VDA.

Dans la boîte de dialogue Règles de redirection de périphérique USB client :

  1. Cliquez sur Nouveau pour ajouter une règle de redirection, ou cliquez sur Modifier pour vérifier une règle existante.
  2. Après avoir créé (ou modifié) une règle, cliquez sur OK.

Image du paramètre de règle de redirection USB client

Pour de plus amples informations sur la configuration de la redirection USB générique, reportez-vous au Guide de configuration de la redirection USB générique Citrix.

Créer le module noyau VHCI

La redirection USB dépend des modules du noyau VHCI (usb-vhci-hcd.ko et usb-vhci-iocif.ko). Ces modules font partie de la distribution de Linux VDA (inclus dans le package RPM). Ils sont compilés selon les noyaux de distribution Linux officiels et sont indiqués dans le tableau suivant :

Distribution Linux prise en charge Version du noyau
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

Important :

Si le noyau de votre machine n’est pas compatible avec le pilote créé pour les Linux VDA, le service USB peut ne pas parvenir à démarrer. Dans ce cas, vous pouvez utiliser la fonctionnalité de redirection USB uniquement si vous créez vos propres modules noyau VHCI.

Vérifier que votre noyau est cohérent avec les modules créés par Citrix

Sur la ligne de commande, exécutez la commande suivante pour vérifier si le noyau est cohérent :

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

Si la commande s’exécute correctement, le module noyau a été chargé avec succès et la version est cohérente avec celle installée par Citrix.

Si la commande s’exécute avec des erreurs, le noyau n’est pas cohérent avec le module Citrix et doit être recréé.

Recréer le module noyau VHCI

Si votre module noyau n’est pas cohérent avec la version Citrix, procédez comme suit :

  1. Téléchargez le code source LVDA depuis le site de téléchargement de Citrix. Sélectionnez le fichier de la section « Linux Virtual Delivery Agent (sources) ».

  2. Décompressez le fichier citrix-linux-vda-sources.zip. Accédez à linux-vda-souces/vhci-hcd-1.15.tar.bz2 et décompressez les fichiers source VHCI à l’aide de tar xvf vhci-hcd-1.15.tar.bz2.

  3. Créez le module noyau selon les fichiers d’en-tête et le fichier Module.symvers. Suivez la procédure suivante pour installer les fichiers d’en-tête du noyau et créez le fichier Module.symvers selon la distribution Linux appropriée :

    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-->
    

    Conseil :

    Si l’installation réussit, un dossier de noyau similaire au suivant est créé :

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

  4. Dans le dossier /usr/src/kernels/3.10.0-327.10.1.el7.x86_64, vérifiez que le fichier Module.symvers est présent. Si le fichier ne se trouve pas dans le dossier, créez lez noyau pour obtenir ce fichier (en exécutant les commandes suivantes dans l’ordre : make oldconfig; make prepare; make modules; make) ou copiez-le depuis /usr/src/kernels/3.10.0-327.10.1.el7.x86_64-obj/x86_64/defaults/module.*

  5. Exécutez les commandes suivantes pour installer les outils de développement.

    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. Dans le fichier vhci-hcd-1.15/Makefile, modifiez le fichier Makefile de VCHI et définissez KDIR sur le répertoire du noyau :

    #KDIR = $(BUILD_PREFIX)/lib/modules/$(KVERSION)/build
    
    KDIR = /usr/src/kernels/3.10.0-327.10.1.el7.x86_64
    <!--NeedCopy-->
    
  7. Dans le dossier vhci-hcd-1.15/, exécutez make pour créer le noyau VHCI.

    Remarque :

    Si la création a réussi, les modules usb-vhci-hcd.ko et usb-vhci-iocifc.ko sont créés dans le dossier vhci-hcd-1.15/.

  8. Remplacez le module du noyau par celui qui vient d’être créé : cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/

  9. Redémarrez le service USB :

    service ctxusbsd restart
    <!--NeedCopy-->
    
  10. Fermez, puis rouvrez la session. Vérifiez si la redirection USB fonctionne.

Résoudre les problèmes de compilation du noyau

Les erreurs suivantes peuvent se produire lorsque vous créez le module VHCI avec des noyaux spécifiques :

  • L’erreur implicit declaration of function ‘copy\_to\_user’ peut se produire, voir la capture d’écran suivante :

    Image de la déclaration implicite d'erreur de fonction

    L’erreur se produit en raison des modifications du fichier d’en-tête dans les noyaux. Pour résoudre ce problème, ajoutez la ligne #include <linux/uaccess.h> au fichiervhci-hcd-1.15/usb-vhci-iocifc.c.

    Image de l'ajout d'une ligne pour corriger une erreur de compilation du noyau

  • L’erreur ‘driver\_attr\_debug_output’ undeclared peut se produire, voir la capture d’écran suivante :

    Image de l'erreur de compilation du noyau non déclarée

    L’erreur se produit lorsque des symboles sont manquants sur le noyau. Pour contourner le problème, désactivez la définition de macro pour DEBUG dans les fichiers vhci-hcd-1.15/usb-vhci-iocifc.c et vhci-hcd-1.15/usb-vhci-hcd.c.

    Image de la désactivation de la macro

  • L’erreur ‘make[3]: *** No rule to make target 'arch/x86/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop. peut se produire, voir la capture d’écran suivante :

    Image d'une erreur de compilation du noyau

    Pour contourner le problème, remplacez SUBDIRS=$(PWD) par M=$(shell pwd) en utilisant les commandes suivantes sous le chemin 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-->
    
  • L’erreur ./include/uapi/linux/stat.h:30:17: error: expected ‘)’ before numeric constant
    #define S_IRUSR 00400 peut se produire, voir la capture d’écran suivante :

    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-->
    
  • L’erreur ./arch/x86/include/asm/uaccess.h:433:29: error: invalid initializer __typeof__(ptr) __pu_ptr = (ptr); \ peut se produire, voir la capture d’écran suivante :

    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);.

  • L’erreur error: ‘access_ok’ undeclared (first use in this function)
    if(unlikely((_IOC_DIR(cmd) & _IOC_READ) && !access_ok(VERIFY_WRITE, arg, _IOC_SIZE(cmd)))) peut se produire, voir la capture d’écran suivante :

    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-->
    

Résolution des problèmes de redirection USB

Utilisez les informations de cette section pour résoudre les problèmes que vous pourriez rencontrer lors de l’utilisation du Linux VDA.

Impossible de démonter le disque USB redirigé

Pour le contrôle d’accès de tous les disques USB redirigés à partir de l’application Citrix Workspace, le Linux VDA gère tous ces périphériques sous privilèges d’administrateur afin de garantir que seul le propriétaire peut accéder au périphérique redirigé. Par conséquent, l’utilisateur ne peut pas démonter le périphérique sans privilèges d’administrateur.

Image de périphérique impossible à démonter

Le fichier est perdu lorsque vous arrêtez la redirection d’un disque USB

Si vous redirigez un disque USB dans une session, essayez de le modifier (par exemple, en créant des fichiers sur le disque), puis arrêtez de le rediriger immédiatement à l’aide de la barre d’outils de l’application Citrix Workspace, le fichier que vous avez modifié ou créé peut être perdu. Ce problème se produit car, lors de l’écriture de données dans un système de fichiers, le système monte le cache mémoire dans le système de fichiers. Les données ne sont pas écrites sur le disque lui-même. Si vous arrêtez la redirection à l’aide de la barre d’outils de l’application Citrix Workspace, les données n’ont pas le temps d’être purgées vers le disque, ce qui entraîne une perte de données. Pour résoudre ce problème, utilisez la commande de synchronisation dans un terminal pour purger les données vers le disque avant d’arrêter la redirection USB.

Image de fichier perdu lorsque vous arrêtez la redirection d'un disque USB.

Aucun périphérique dans la barre d’outils de l’application Citrix Workspace

Dans certains cas, vous ne pouvez pas voir les périphériques figurant sur la barre d’outils de l’application Citrix Workspace, ce qui indique qu’aucune redirection USB n’est en cours. Si vous rencontrez ce problème, vérifiez les éléments suivants :

  • La stratégie est configurée pour permettre la redirection USB.
  • Le module du noyau est compatible avec votre noyau

Image de l'onglet Périphériques dans la barre d'outils de l'application Citrix Workspace

Remarque :

L’onglet Périphériques n’est pas disponible dans l’application Citrix Workspace pour Linux.

Affichage des périphériques USB dans la barre d’outils de l’application Citrix Workspace, mais avec la mention Limité par une stratégie, ce qui entraîne l’échec de la redirection

Lorsque le problème se produit, procédez comme suit :

  • Configurez la stratégie du Linux VDA pour activer la redirection.
  • Vérifiez si des restrictions de stratégie supplémentaires sont configurées dans le registre de l’application Citrix Workspace. Vérifiez DeviceRules dans le chemin d’accès du registre pour vous assurer que ce paramètre n’interdit pas l’accès au périphérique :

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

Pour de plus amples informations, consultez l’article du centre de connaissances Comment configurer la redirection automatique des périphériques USB.

Un périphérique USB est redirigé correctement, mais je ne peux pas l’utiliser dans ma session

Généralement, seuls les périphériques USB pris en charge peuvent être redirigés. D’autres périphériques peuvent également être redirigés vers une session VDA Linux active. Un nœud appartenant à l’utilisateur est créé dans le chemin d’accès /dev système. Toutefois, ce sont les pilotes et la configuration qui déterminent si l’utilisateur peut utiliser le périphérique. Si un périphérique vous appartenant (branché) n’est pas accessible, ajoutez-le à une stratégie sans restriction.

Remarque :

Dans le cas des lecteurs USB, le VDA Linux configure et monte le disque. L’utilisateur (et seul l’utilisateur qui l’a installé) peut accéder au disque sans aucune configuration supplémentaire. Cela peut ne pas être possible avec les périphériques qui ne se trouvent pas dans la liste des périphériques pris en charge.

Configurer la redirection USB