USBリダイレクトの構成
USBデバイスは、Citrix Workspace™アプリとLinux VDAデスクトップ間で共有されます。USBデバイスがデスクトップにリダイレクトされると、ユーザーはUSBデバイスをローカルに接続されているかのように使用できます。
| > | **ヒント:** | |
ネットワーク遅延が100ミリ秒未満の場合、USBリダイレクトの使用をお勧めします。ネットワーク遅延が200ミリ秒を超える場合は、USBリダイレクトを使用しないでください。
-
USBリダイレクトには、主に3つの機能領域があります。
- オープンソースプロジェクトの実装(VHCI)
- VHCIサービス
- USBサービス
オープンソースVHCI:
| 1 | 2 | | |
| 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デバイスリダイレクトを有効(または無効)にします(ワークステーションホストのみ)。
設定の編集ダイアログで:
- 許可を選択します。
- OKをクリックします。

USBリダイレクトルールの設定
USBリダイレクトポリシーを有効にした後、Citrix Studioを使用して、Linux VDAで許可(または拒否)されるデバイスを指定することで、リダイレクトルールを設定します。
クライアントUSBデバイスリダイレクトルールダイアログで:
- 新規をクリックしてリダイレクトルールを追加するか、編集をクリックして既存のルールを確認します。
- ルールを作成(または編集)した後、OKをクリックします。

VHCIカーネルモジュールのビルド
USBリダイレクトは、VHCIカーネルモジュール(usb-vhci-hcd.koおよびusb-vhci-iocif.ko)に依存します。これらのモジュールは、Linux VDAディストリビューションの一部(RPMパッケージの一部)として提供されます。これらは公式のLinuxディストリビューションカーネルに基づいてコンパイルされており、次の表に示されています。
| サポートされているLinuxディストリビューション | カーネルバージョン |
|---|---|
| RHEL 8.3 | 4.18.0-240.15.1 |
| RHEL 8.2 | 4.18.0-240.15.1 |
| RHEL 8.1 | 4.18.0-240.15.1 |
| RHEL 7.9 | 3.10.0-1160.21.1 |
| RHEL 7.8 | 3.10.0-1160.21.1 |
| SUSE 12.5 | 4.12.14-122.63.1 |
| 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バージョンと一致しない場合は、次の手順を実行します。
-
CitrixダウンロードサイトからLVDAソースコードをダウンロードします。「Linux Virtual Delivery Agent (sources)」セクションに含まれるファイルを選択します。
-
citrix-linux-vda-sources.zipファイルを解凍します。linux-vda-souces/vhci-hcd-1.15.tar.bz2に移動し、
tar xvf vhci-hcd-1.15.tar.bz2を使用してVHCIソースファイルを解凍します。 -
ヘッダーファイルと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
-
/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.*からコピーします。 -
開発ツールをインストールするには、次のコマンドを実行します。
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--> -
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--> -
vhci-hcd-1.15/フォルダーでmakeを実行し、VHCI カーネルをビルドします。注:
ビルドが成功すると、
usb-vhci-hcd.koとusb-vhci-iocifc.koがvhci-hcd-1.15/フォルダーに作成されます。 -
カーネルモジュールを新しくビルドしたものに置き換えます: cp -f usb-vhci-*.ko /opt/Citrix/VDA/lib64/
-
USB サービスを再起動します。
service ctxusbsd restart <!--NeedCopy--> -
セッションからログオフし、再度ログオンします。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 コマンドを使用してデータをディスクにフラッシュします。

Citrix Workspace アプリのツールバーにデバイスが表示されない
Citrix Workspace アプリのツールバーにデバイスが表示されない場合があり、これは USB リダイレクトが行われていないことを示します。この問題が発生した場合は、以下を確認してください。
- USB リダイレクトを許可するようにポリシーが構成されていること
- カーネルモジュールがカーネルと互換性があること

注:
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 はディスクを構成してマウントします。ユーザー(およびそれをインストールした所有者のみ)は、追加の構成なしでディスクにアクセスできます。これは、サポートされているデバイスリストにないデバイスには当てはまらない場合があります。