配置 USB 重定向

USB 设备在 Citrix Receiver™ 和 Linux VDA 桌面之间共享。当 USB 设备重定向到桌面时,用户可以像本地连接一样使用该 USB 设备。

  • USB 重定向包括以下三个主要功能区域:

  • 开源项目实施 (VHCI)
  • VHCI 服务
  • USB 服务

开源 VHCI:

USB 重定向功能的这一部分开发了一个基于 IP 网络 的通用 USB 设备共享系统。它由一个 Linux 内核驱动程序和一些用户模式库组成,这些库允许您与内核驱动程序通信以获取所有 USB 数据。在 Linux VDA 实施中,Citrix 重用了 VHCI 的内核驱动程序。但是,Linux VDA 和 Citrix Receiver 之间的所有 USB 数据传输都封装在 Citrix ICA® 协议包中。

VHCI 服务:

VHCI 服务是 Citrix 提供的一项开源服务,用于与 VHCI 内核模块通信。此服务充当 VHCI 和 Citrix USB 服务之间的网关。

USB 服务:

USB 服务表示一个 Citrix 模块,用于管理 USB 设备上的所有虚拟化和数据传输。

USB 重定向的工作原理

通常,如果 USB 设备成功重定向到 Linux VDA,则会在系统 /dev 路径中创建一个或多个设备节点。但是,有时重定向的设备无法用于活动的 Linux VDA 会话。USB 设备依赖驱动程序才能正常运行,并且某些设备需要特殊驱动程序。如果未提供驱动程序,则活动的 Linux VDA 会话将无法访问重定向的 USB 设备。为确保 USB 设备连接,请安装驱动程序并正确配置系统。

Linux VDA 支持成功重定向到客户端和从客户端重定向的 USB 设备列表。此外,设备(尤其是 USB 磁盘)已正确装载,允许用户无需任何额外配置即可访问磁盘。

支持的 USB 设备

以下设备已验证支持此版本的 Linux VDA。其他设备可能可以自由使用,但结果可能出乎意料:

注意:

Linux VDA 仅支持 USB 2.0 协议。

  • USB 大容量存储设备 VID:PID 文件系统
    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
    USB 3D 鼠标 VID:PID  
    3DConnexion SpaceMouse Pro 046d: c62b  
    USB 扫描仪 VID:PID  
    Epson Perfection V330 photo 04B8: 0142  

配置 USB 重定向

Citrix 策略控制 USB 设备重定向是启用还是禁用。此外,还可以使用 Delivery Controller™ 策略指定设备类型。为 Linux VDA 配置 USB 重定向时,请配置以下策略和规则:

  • 客户端 USB 设备重定向策略
  • 客户端 USB 设备重定向规则

启用 USB 重定向策略

在 Citrix Studio 中,启用(或禁用)到客户端和从客户端的 USB 设备重定向(仅适用于工作站主机)。

编辑设置对话框中:

  1. 选择允许
  2. 单击确定

启用 USB 重定向的图像

设置 USB 重定向规则

启用 USB 重定向策略后,使用 Citrix Studio 通过指定 Linux VDA 上允许(或拒绝)哪些设备来设置重定向规则。

在客户端 USB 设备重定向规则对话框中:

  1. 单击新建以添加重定向规则,或单击编辑以查看现有规则。
  2. 创建(或编辑)规则后,单击确定

客户端 USB 重定向规则设置

构建 VHCI 内核模块

USB 重定向依赖于 VHCI 内核模块(usb-vhci-hcd.kousb-vhci-iocif.ko)。这些模块是 Linux VDA 分发版的一部分(作为 RPM 软件包 的一部分)。它们是根据官方 Linux 分发版内核编译的,并在下表中注明:

支持的 Linux 分发版 内核版本
RHEL 7.3 3.10.0-514.el7.x86_64
RHEL 6.6 2.6.32-504.el6.x86_64
SUSE 12.2 4.4.49-92.11-default
SUSE 11.4 3.0.101-0.47.55-default
Ubuntu 16.04 4.4.0-45-generic

重要:

如果您的计算机内核与 Citrix 为 Linux VDA 构建的驱动程序不兼容,则 USB 服务可能无法启动。在这种情况下,只有在您构建自己的 VHCI 内核模块时,才能使用 USB 重定向功能。

验证您的内核是否与 Citrix 构建的模块一致

在命令行中,运行以下命令以验证内核是否一致:

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

如果命令成功运行,则内核模块已成功加载,并且版本与 Citrix 安装的版本一致。

如果命令运行出错,则内核与 Citrix 模块不一致,必须重新构建。

重新构建 VHCI 内核模块

如果您的内核模块与 Citrix 版本不一致,请执行以下操作:

  1. Citrix 下载站点下载 LVDA 源代码。选择“Linux Virtual Delivery Agent (sources)”部分中包含的文件。

  2. 从 citrix-linux-vda-sources.zip 文件中恢复文件;您可以在 linux-vda-souces/vhci-hcd-1.15.tar.bz2 中获取 VHCI 源文件;您可以使用 tar xvf vhci-hcd-1.15.tar.bz2 恢复 VHCI 文件。

  3. 基于头文件和 Module.symvers 文件构建内核模块。使用以下步骤安装内核头文件并根据相应的 Linux 发行版创建 Module.symvers

    RHEL 7.3/RHEL 6.9/RHEL 6.6:

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

    SUSE 12.2:

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

    SUSE 11.4:

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

    Ubuntu 16.04:

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

    提示:

    如果安装成功,将存在一个类似于以下内容的内核文件夹:

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

  4. 在 /usr/src/kernels/3.10.0-327.10.1.el7.x86_64 文件夹中,验证 Module.symvers 文件是否存在。如果此文件不在该文件夹中,请构建内核以获取此文件(例如,make oldconfigmake preparemake modulesmake),或者从 /usr/src/kernels/3.10.0-327.10.1.el7.x86_64-obj/x86_64/defaults/module.* 复制它。

  5. vhci-hcd-1.15/Makefile 文件中,更改 VCHI 的 Makefile 并将 KDIR 设置为内核目录:

    #KDIR = $(BUILD_PREFIX)/lib/modules/$(KVERSION)/build
    
    KDIR = /usr/src/kernels/3.10.0-327.10.1.el7.x86_64
    <!--NeedCopy-->
    
  6. vhci-hcd-1.15/ 文件夹中,运行 make 以构建 VHCI 内核。

    注意:

    如果构建成功,将在 vhci-hcd-1.15/ 文件夹中创建 usb-vhci-hcd.kousb-vhci-iocifc.ko

  7. 将内核模块替换为新构建的模块:cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/

  8. 重新启动 USB 服务:service ctxusbsd restart

  9. 注销并重新登录会话。检查 USB 重定向是否正常运行。

解决 USB 重定向问题

使用本节中的信息解决使用 Linux VDA 时可能遇到的各种问题。

无法卸载重定向的 USB 磁盘

对于从 Citrix Receiver 重定向的所有 USB 磁盘的访问控制,Linux VDA 在管理权限下管理所有这些设备,以确保只有所有者才能访问重定向的设备。因此,用户在没有管理权限的情况下无法卸载设备。

无法卸载设备的图像

停止重定向 USB 磁盘时文件丢失

如果您将 USB 磁盘重定向到会话并尝试修改它(例如,在磁盘上创建一些文件),然后立即使用 Citrix Receiver 的工具栏停止重定向,则您修改或创建的文件可能会丢失。出现此问题的原因是,当您将数据写入文件系统时,系统会在文件系统中装载内存缓存。数据不会写入磁盘本身。如果您使用 Citrix Receiver 的工具栏停止重定向,则没有剩余时间将数据刷新到磁盘,从而导致数据丢失。要解决此问题,请在停止 USB 重定向之前,在终端中使用 sync 命令将数据刷新到磁盘。

停止重定向 USB 磁盘时文件丢失的图像

Citrix Receiver 工具栏中没有设备

有时,您可能无法在 Citrix Receiver 的工具栏中看到列出的设备,这表明没有进行 USB 重定向。如果您遇到此问题,请验证以下内容:

  • 策略配置为允许 USB 重定向
  • 内核模块与您的内核兼容

Receiver 工具栏中设备选项卡的图像

注意:

设备选项卡在适用于 Linux 的 Citrix Receiver 中不可用。

USB 设备可在 Citrix Receiver 工具栏中看到,但标记为 策略受限 时重定向失败

此问题是由于设备的策略配置导致的。在这种情况下:

  • 配置 Linux VDA 策略以启用重定向
  • 检查 Citrix Receiver 的注册表中是否配置了任何其他策略限制。设备可能被 Citrix Receiver 的注册表设置阻止。检查注册表路径中的 DeviceRules 以确保此设置未拒绝设备访问:

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

USB 设备重定向成功,但我无法在会话中使用它

通常,只有支持的 USB 设备才能重定向。但是,有时其他类型的设备可能会重定向到活动的 Linux VDA 会话。在这种情况下,对于每个重定向的设备,都会在系统 /dev 路径中创建一个由用户拥有的节点。但是,驱动程序和配置决定了用户是否可以成功使用该设备。如果您发现设备已拥有(已插入)但无法访问,请将该设备添加到不受限制的策略中。

注意:

对于 USB 驱动器,Linux VDA 会配置并装载磁盘。用户(并且只有安装它的所有者)无需任何额外配置即可访问磁盘。对于不在支持设备列表中的设备,情况可能并非如此。

配置 USB 重定向