Linux Virtual Delivery Agent 2103

USBリダイレクトの設定

USBデバイスは、Citrix Workspace™アプリとLinux VDAデスクトップ間で共有されます。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をサポートすることが検証されています。 その他のデバイスは自由に使用できますが、予期しない結果が生じる可能性があります。    

| > | **注:** | | | | | | | | | | |

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フラッシュドライブ 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.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

重要:

お使いのマシンのカーネルが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'エラーが発生する可能性があります。以下のスクリーンショットを参照してください。

    暗黙的な関数宣言エラーの画像

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

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

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

    未宣言のカーネルビルドエラーの画像

    このエラーは、カーネルにシンボルがない場合に発生します。回避策として、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アプリのツールバーにあるデバイスタブの画像

注:

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

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

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

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

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

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

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

注:

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

USBリダイレクトの設定