Agent de livraison virtuel Linux 2103

Configuration de 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 est redirigé vers le bureau, l’utilisateur peut l’utiliser comme s’il était connecté localement.

| >**Conseil :** | | |

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

  • La redirection USB comprend trois domaines de fonctionnalité principaux :

  • Implémentation de projet open source (VHCI)
  • Service VHCI
  • Service USB

VHCI open source :

Cette partie de la fonctionnalité de redirection USB développe un système général de partage de périphériques USB sur un réseau IP. Elle se compose d’un pilote de noyau Linux et de certaines bibliothèques en mode utilisateur qui vous permettent de communiquer avec le pilote de noyau pour obtenir toutes les données USB. Dans l’implémentation Linux VDA, Citrix réutilise le pilote de noyau de VHCI. Cependant, tous les transferts de données USB entre le Linux VDA et l’application Citrix Workspace sont encapsulés dans le paquet de protocole Citrix ICA®.

Service VHCI :

Le service VHCI est un service open source fourni par Citrix pour communiquer avec le module de noyau VHCI. Ce service fonctionne comme une passerelle entre VHCI et le service USB Citrix.

Service USB :

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

Fonctionnement de la redirection USB

Généralement, si un périphérique USB est redirigé avec succès vers le Linux VDA, un ou plusieurs nœuds de périphérique sont créés dans le chemin /dev du système. Parfois, cependant, le périphérique redirigé n’est pas utilisable pour une session Linux VDA active. Les périphériques USB dépendent de 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 garantir la connectivité des périphériques USB, installez les pilotes et configurez correctement le système.

Le Linux VDA prend en charge une liste de périphériques USB qui sont redirigés avec succès vers et depuis le client. De plus, le périphérique est correctement monté, en particulier 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é vérifiés pour prendre en charge cette version du Linux VDA. D’autres périphériques peuvent être utilisés librement, avec des résultats inattendus :

| > | **Remarque :** | | | | | | | |

  • Le Linux VDA 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
Clé USB SanDisk SDCZ80 0781:5580 FAT32
Disque dur WD 1058:10B8 FAT32
Souris 3D USB VID:PID  
3DConnexion SpaceMouse Pro 046d: c62b  
Scanner USB VID:PID  
Epson Perfection V330 photo 04B8: 0142  

Configurer la redirection USB

Une stratégie Citrix contrôle si la redirection de périphériques USB est activée ou désactivée. De plus, 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 le Linux VDA, configurez la stratégie et les règles suivantes :

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

Activer la stratégie de redirection USB

Dans Citrix Studio, activez (ou désactivez) la redirection de périphériques USB vers et depuis le client (pour les 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 les règles de redirection USB

Après avoir activé 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 autorisés (ou refusés) sur le Linux VDA.

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

  1. Cliquez sur Nouveau pour ajouter une règle de redirection, ou cliquez sur Modifier pour examiner 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

Compiler le module de noyau VHCI

La redirection USB dépend des modules de noyau VHCI (usb-vhci-hcd.ko et usb-vhci-iocif.ko). Ces modules font partie de la distribution Linux VDA (en tant que partie du paquet RPM). Ils sont compilés sur la base des noyaux de distribution Linux officiels et sont répertorié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 conçu pour le Linux VDA, le service USB pourrait ne pas démarrer. Dans ce cas, vous ne pouvez utiliser la fonctionnalité de redirection USB que si vous compilez vos propres modules de noyau VHCI.

Vérifier la cohérence de votre noyau avec les modules compilé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 avec succès, le module de 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 est incohérent avec le module Citrix et doit être recompilé.

Recompiler le module de noyau VHCI

Si votre module de noyau est incohé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 contenu dans 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. Compilez le module de noyau en fonction des fichiers d’en-tête et du fichier Module.symvers. Suivez les étapes ci-dessous pour installer les fichiers d’en-tête du noyau et créer Module.symvers en fonction de 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 est réussie, il existe un dossier de noyau ressemblant à :

    /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 ce fichier n’est pas dans le dossier, compilez le noyau (en exécutant les commandes suivantes dans l’ordre : make oldconfig ; make prepare ; make modules ; make) pour obtenir ce fichier 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 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 compiler le noyau VHCI.

    Remarque :

    Si la compilation a réussi, 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 nouvellement compilé : cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/

  9. Redémarrez le service USB :

    service ctxusbsd restart
    <!--NeedCopy-->
    
  10. Déconnectez-vous et reconnectez-vous à 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 compilez 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 l’erreur de déclaration implicite de fonction

    L’erreur se produit en raison de modifications de fichiers d’en-tête dans les noyaux. Pour contourner le problème, ajoutez la ligne #include <linux/uaccess.h> au fichier vhci-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) à l’aide des 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 d’une erreur de compilation du noyau

    Exécutez les commandes suivantes pour contourner le problème :

     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 d’une erreur de compilation du noyau

    Pour contourner le problème, modifiez la ligne 219 du fichier usb-vhci-iocifc.c de __put_user('\0', arg->bus_id); à __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 d’une erreur de compilation du noyau

    Exécutez les commandes suivantes pour contourner le problème :

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

Résoudre les problèmes de redirection USB

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

Impossible de démonter le disque USB redirigé

Pour le contrôle d’accès de tous les disques USB redirigés depuis l’application Citrix Workspace, le VDA Linux gère tous ces périphériques avec des privilèges administratifs 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 les privilèges administratifs.

Image de l’impossibilité de démonter un périphérique

Fichier perdu lors de l’arrêt de la redirection d’un disque USB

Si vous redirigez un disque USB vers une session et essayez de le modifier (par exemple, créer des fichiers sur le disque), puis arrêtez immédiatement la redirection à 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 lorsque vous écrivez des données sur 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, il ne reste plus de temps pour que les données soient vidées sur le disque, ce qui entraîne une perte de données. Pour résoudre ce problème, utilisez la commande sync dans un terminal pour vider les données sur le disque avant d’arrêter la redirection USB.

Image d’un fichier perdu lors de l’arrêt de la redirection d’un disque USB

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

Parfois, vous ne voyez peut-être pas les périphériques répertoriés dans la barre d’outils de l’application Citrix Workspace, ce qui indique qu’aucune redirection USB n’a lieu. Si vous rencontrez ce problème, vérifiez les points suivants :

  • La stratégie est configurée pour autoriser 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 Workspace

Remarque :

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

Échec de la redirection lorsque les périphériques USB sont visibles dans la barre d’outils de l’application Citrix Workspace, mais sont étiquetés stratégie restreinte

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

  • Configurez la stratégie du VDA Linux 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 du registre pour vous assurer que l’accès au périphérique n’est pas refusé par ce paramètre :

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

Un périphérique USB est redirigé avec succès, 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. Pour chaque périphérique redirigé, un nœud appartenant à l’utilisateur est créé dans le chemin système /dev. Cependant, ce sont les pilotes et la configuration qui déterminent si l’utilisateur peut utiliser le périphérique avec succès. Si vous trouvez un périphérique possédé (branché) mais inaccessible, ajoutez le périphérique à une stratégie non restreinte.

Remarque :

Dans le cas des disques USB, le VDA Linux configure et monte le disque. L’utilisateur (et seul le propriétaire qui l’a installé) peut accéder au disque sans aucune configuration supplémentaire. Ce n’est peut-être pas le cas pour les périphériques qui ne figurent pas dans la liste des périphériques pris en charge.

Configuration de la redirection USB