Linux Virtual Delivery Agent 2106

USB リダイレクトの構成

Citrix Workspace™ アプリと Linux VDA デスクトップ間で USB デバイスが共有されます。USB デバイスがデスクトップにリダイレクトされると、ユーザーはローカルに接続されているかのように USB デバイスを使用できます。

| >**ヒント:** | | |

  • ネットワーク遅延が 100 ミリ秒未満の場合は、USB リダイレクトを使用することをお勧めします。ネットワーク遅延が 200 ミリ秒を超える場合は、USB リダイレクトを使用しないでください。

  • USB リダイレクトには、主に 3 つの機能領域があります。

  • オープンソースプロジェクトの実装 (VHCI)
  • VHCI サービス
  • USB サービス

オープンソース VHCI:

USB リダイレクト機能のこの部分は、IP ネットワークを介した汎用 USB デバイス共有システムを開発します。これは、Linux カーネルドライバーと、カーネルドライバーと通信してすべての USB データを取得できるいくつかのユーザーモードライブラリで構成されています。Linux VDA の実装では、Citrix は VHCI のカーネルドライバーを再利用します。ただし、Linux VDA と Citrix Workspace アプリ間のすべての USB データ転送は、Citrix ICA® プロトコルパッケージにカプセル化されます。

VHCI サービス:

VHCI サービスは、VHCI カーネルモジュールと通信するために Citrix が提供するオープンソースサービスです。このサービスは、VHCI と Citrix USB サービス間のゲートウェイとして機能します。

USB サービス:

USB サービスは、USB デバイス上のすべての仮想化とデータ転送を管理する Citrix モジュールを表します。

USB リダイレクトの仕組み

通常、USB デバイスが Linux VDA に正常にリダイレクトされると、システム /dev パスに 1 つ以上のデバイスノードが作成されます。ただし、リダイレクトされたデバイスがアクティブな Linux VDA セッションで使用できない場合があります。USB デバイスは適切に機能するためにドライバーに依存しており、一部のデバイスには特別なドライバーが必要です。ドライバーが提供されていない場合、リダイレクトされた USB デバイスはアクティブな Linux VDA セッションからアクセスできません。USB デバイスの接続を確保するには、ドライバーをインストールし、システムを適切に構成してください。

Linux VDA は、クライアントとの間で正常にリダイレクトされる USB デバイスのリストをサポートしています。さらに、デバイス、特に USB ディスクは適切にマウントされ、ユーザーは追加の構成なしでディスクにアクセスできます。

サポートされる USB デバイス

以下のデバイスは、このバージョンの Linux VDA をサポートすることが検証されています。|その他のデバイスは自由に使用できますが、予期しない結果が生じる可能性があります。|| | 1 | 2 | | | >**注:** | | | | | > | | | | |

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. OK をクリックします。

USB リダイレクトを有効にするイメージ

USB リダイレクトルールの設定

USB リダイレクトポリシーを有効にした後、Citrix Studio を使用して、Linux VDA で許可 (または拒否) されるデバイスを指定することにより、リダイレクトルールを設定します。

クライアント USB デバイスリダイレクトルールダイアログで:

  1. 新規 をクリックしてリダイレクトルールを追加するか、編集 をクリックして既存のルールを確認します。
  2. ルールを作成 (または編集) した後、OK をクリックします。

クライアント USB リダイレクトルール設定のイメージ

VHCI カーネルモジュールのビルド

USB リダイレクトは、VHCI カーネルモジュール (usb-vhci-hcd.ko および usb-vhci-iocif.ko) に依存します。これらのモジュールは、Linux VDA ディストリビューションの一部です (RPM パッケージの一部として)。これらは公式の Linux ディストリビューションカーネルに基づいてコンパイルされ、次の表に示されています。

サポートされる Linux ディストリビューション カーネルバージョン
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

重要:

お使いのマシンのカーネルが 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 に移動し、tar xvf vhci-hcd-1.15.tar.bz2 を使用して VHCI ソースファイルを解凍します。

  3. ヘッダーファイルと Module.symvers ファイルに基づいてカーネルモジュールをビルドします。適切な Linux ディストリビューションに基づいてカーネルヘッダーファイルをインストールし、Module.symvers を作成するには、次の手順を使用します。

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

    ヒント:

    インストールが成功すると、次のようなカーネルフォルダーがあります。

    /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 oldconfig; make prepare; make modules; make) このファイルを取得するか、/usr/src/kernels/3.10.0-327.10.1.el7.x86_64-obj/x86_64/defaults/module.* からコピーします。

  5. 開発ツールをインストールするには、次のコマンドを実行します。

    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. 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-->
    
  7. vhci-hcd-1.15/ フォルダーで make を実行し、VHCI カーネルをビルドします。

    注:

    ビルドが成功すると、vhci-hcd-1.15/ フォルダーに usb-vhci-hcd.kousb-vhci-iocifc.ko が作成されます。

  8. カーネルモジュールを新しくビルドしたものに置き換えます: cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/

  9. USB サービスを再起動します。

    service ctxusbsd restart
    <!--NeedCopy-->
    
  10. セッションからログオフし、再度ログオンします。USB リダイレクトが機能しているか確認します。

カーネルビルドの問題のトラブルシューティング

特定のカーネルで VHCI モジュールをビルドする際に、以下のエラーが発生する可能性があります。

  • implicit declaration of function 'copy\_to\_user' エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    implicit declaration of function エラーの画像

    このエラーは、カーネルのヘッダーファイルの変更が原因で発生します。回避策として、vhci-hcd-1.15/usb-vhci-iocifc.c ファイルに #include <linux/uaccess.h> の行を追加します。

    カーネルビルドエラーを修正するための行追加の画像

  • 'driver\_attr\_debug_output' が宣言されていないエラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    宣言されていないカーネルビルドエラーの画像

    このエラーは、カーネルにシンボルが不足している場合に発生します。回避策として、vhci-hcd-1.15/usb-vhci-iocifc.c および vhci-hcd-1.15/usb-vhci-hcd.c ファイルで DEBUG のマクロ定義を無効にします。

    マクロ無効化の画像

  • 'make[3]: *** No rule to make target 'arch/x86/tools/relocs_32.c', needed by 'arch/x86/tools/relocs_32.o'. Stop. エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    カーネルビルドエラーの画像

    回避策として、vhci-hcd-1.15/ パスで以下のコマンドを使用して SUBDIRS=$(PWD)M=$(shell pwd) に置き換えます。

     sed -i 's/SUBDIRS=$(PWD)/M=$(shell pwd)/g' Makefile
    
     sed -i 's/SUBDIRS=$(PWD)/M=$(shell pwd)/g' test/Makefile
     <!--NeedCopy-->
    
  • ./include/uapi/linux/stat.h:30:17: error: expected ')' before numeric constant #define S_IRUSR 00400 エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    カーネルビルドエラーの画像

    この問題を回避するには、以下のコマンドを実行します。

     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-->
    
  • ./arch/x86/include/asm/uaccess.h:433:29: error: invalid initializer __typeof__(ptr) __pu_ptr = (ptr); \ エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    カーネルビルドエラーの画像

    回避策として、usb-vhci-iocifc.c ファイルの 219 行目を __put_user('\0', arg->bus_id); から __put_user('\0', arg->bus_id + 0); に変更します。

  • error: 'access_ok' undeclared (first use in this function) if(unlikely((_IOC_DIR(cmd) & _IOC_READ) && !access_ok(VERIFY_WRITE, arg, _IOC_SIZE(cmd)))) エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    カーネルビルドエラーの画像

    この問題を回避するには、以下のコマンドを実行します。

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

USB リダイレクトの問題のトラブルシューティング

このセクションの情報を使用して、Linux VDA の使用時に発生する可能性のあるさまざまな問題のトラブルシューティングを行います。

リダイレクトされた USB ディスクのマウント解除不可

Citrix Workspace アプリからリダイレクトされたすべての USB ディスクのアクセス制御のため、Linux VDA はこれらのデバイスをすべて管理者権限で管理し、所有者のみがリダイレクトされたデバイスにアクセスできるようにします。その結果、ユーザーは管理者権限なしでデバイスをマウント解除できません。

デバイスのマウント解除不可の画像

USB ディスクのリダイレクト停止時のファイル消失

USB ディスクをセッションにリダイレクトし、それを変更しようとした場合(たとえば、ディスク上にいくつかのファイルを作成する)、その後すぐに Citrix Workspace アプリのツールバーを使用してリダイレクトを停止すると、変更または作成したファイルが失われる可能性があります。この問題は、ファイルシステムにデータを書き込む際に、システムがファイルシステム内のメモリキャッシュをマウントするため、データがディスク自体に書き込まれないために発生します。Citrix Workspace アプリのツールバーを使用してリダイレクトを停止すると、データがディスクにフラッシュされる時間がなくなり、データが失われます。この問題を解決するには、USB リダイレクトを停止する前に、ターミナルで sync コマンドを使用してデータをディスクにフラッシュします。

USB ディスクのリダイレクト停止時にファイルが失われる画像

Citrix Workspace アプリのツールバーにデバイスがない

Citrix Workspace アプリのツールバーにデバイスが表示されない場合があります。これは、USB リダイレクトが行われていないことを示します。この問題が発生した場合は、以下を確認してください。

  • USB リダイレクトを許可するようにポリシーが構成されていること
  • カーネルモジュールがご使用のカーネルと互換性があること

Workspace アプリのツールバーにあるデバイスタブ

注:

デバイスタブは、Linux 版 Citrix Workspace アプリでは利用できません。

Citrix Workspace アプリのツールバーに USB デバイスが表示されるが、ポリシーによって制限されている と表示されリダイレクトに失敗する

この問題が発生した場合は、以下を実行します。

  • リダイレクトを有効にするように Linux VDA ポリシーを構成します。
  • Citrix Workspace アプリのレジストリに追加のポリシー制限が構成されていないか確認します。レジストリパスの DeviceRules を確認して、この設定によってデバイスへのアクセスが拒否されていないことを確認します。

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

USB デバイスは正常にリダイレクトされるが、セッションで使用できない

通常、リダイレクトできるのは サポートされている USB デバイス のみです。その他のデバイスもアクティブな Linux VDA セッションにリダイレクトされる場合があります。リダイレクトされたすべてのデバイスについて、システム /dev パスにユーザーが所有するノードが作成されます。ただし、ユーザーがデバイスを正常に使用できるかどうかは、ドライバーと構成によって決まります。所有されている(接続されている)がアクセスできないデバイスが見つかった場合は、そのデバイスを無制限のポリシーに追加します。

注:

USB ドライブの場合、Linux VDA はディスクを構成してマウントします。ユーザー(およびそれをインストールした所有者のみ)は、追加の構成なしでディスクにアクセスできます。これは、サポートされているデバイスリストにないデバイスには当てはまらない場合があります。

USB リダイレクトの構成