VMware Horizon Linux 云桌面 USB重定向配置

天锦 发表于 女票们的新建与保养 分类,标签:

先前为了更愉快的折腾FPGA,尝试着把Vivado放到远程的服务器上去跑,用USB重定向解决调试的问题。后来又测试发现Linux下的速度要比Windows快那么一丢丢,那么最优解就是放在远程的Linux服务器上跑Vivado啦,随即把系统换成了Vivado,也按照先前折腾的步骤部署了云桌面,安好了View Agent for Linux。但是当我在Client上连接时,提示“USB不可用”。百度搜USB不可用也没搜出个啥,更何况我这是Linux系统。最终在官网的手册中看到了一条”install_viewagent.sh 可选参数“,问题才算有了眉目。

Linux版的Horizon View Agent默认是没有使用USB重定向功能的,需要加上-U yes来启用USB重定向功能。


##卸载原有的ViewAgent
[user@ubuntu ~] sudo /usr/lib/vmware/viewagent/bin/uninstall_viewagent.sh
##删除配置文件
[user@ubuntu ~] rm /etc/vmware/viewagent-machine.cfg 
[user@ubuntu ~] rm /etc/vmware/viewagent-config.txt
[user@ubuntu ~] rm /etc/vmware/jms -r
[user@ubuntu ~] rm /etc/vmware/ssl -r
##重新安装viewagent并启用USB重定向
[user@ubuntu ~] ./install_viewagent.sh -U yes

然而,事情并没有那么简单,我得到了一下报错:

Installation starting...
Failed to install USB redirection module, because the system doesn't meet the following requirement(s):
VHCI driver should be installed.
USB Redirection depends on the VHCI module, and Horizon Agent does not contain the compiled VHCI module for cuurent Linux kernel 4.15.0-96-generic.
Please build your own VHCI module and install it to Linux kernel.
Please refer to product guide for detailed information.

看来是要我手动编译安装VHCI模块。参考《Horizon 7 for Linux 的系统要求》得知:

USB 重定向功能依赖于 USB 虚拟主机控制器接口 (Virtual Host Controller Interface, VHCI) 内核驱动程序。为支持 USB 3.0 和 USB 重定向功能,必须从 https://sourceforge.net/projects/usb-vhci/files/linux%20kernel%20module/ 下载 USB VHCI 源代码。编译 VHCI 驱动程序源代码并在 Linux 系统上安装生成的二进制文件。

命令如下:

##安装依赖项包。
[user@ubuntu ~] apt-get install make
[user@ubuntu ~] apt-get install gcc
[user@ubuntu ~] apt-get install libelf-dev
##编译并安装 VHCI 驱动程序。
[user@ubuntu ~] sudo -i
[root@ubuntu ~] tar -xzvf vhci-hcd-1.15.tar.gz
[root@ubuntu ~] cd vhci-hcd-1.15
[root@ubuntu ~] patch -p1 < full-path_to_patch-file
[root@ubuntu ~] make clean && make && make install
[root@ubuntu ~] cd /VMware-horizonview-agent/    ##ViewAgent目录
[root@ubuntu ~] ./install_viewagent.sh -U yes

注意:

1.如果在 /install_tmp/ 目录下解压缩安装文件 VMware-horizonagent-linux-x86_64-<version>-<build-number>.tar.gz,那么 full-path_to_patch-file 是 /install_tmp/VMware-horizonagent-linux-x86_64-<version>-<buildnumber>/resources/vhci/patch/vhci.patch ,并且要使用的 patch 命令是

[root@ubuntu ~] patch -p1 < /install_tmp/VMware-horizonagent-linux-x86_64-<version>-<build-number>/resources/vhci/patch/vhci.patch


2.make install时一定要切换到root才能成功执行。

3.安装完成后重启

4.如果您的 Linux 内核更改为新版本,您必须重新编译并重新安装 VHCI 驱动程序,但无需重新安装 Horizon for Linux。可以为 VHCI 驱动程序添加动态内核模块支持以解决此问题,具体参考《Horizon 7 for Linux 的系统要求》。

动态内核模块支持

使用手动编译安装的VHCI驱动会在每次内核更新后失效,最好就是使用DKMS动态内核模块支持,实现每次内核更新后自动更新相应的硬件驱动模块。

1.安装内核头文件。

[root@centos ~]# apt install linux-headers-`uname -r`

2.使用以下命令安装 dkms。

[root@centos ~]# apt install dkms

3.提取和修补 VHCI TAR 文件。

[root@centos ~]# tar xzvf vhci-hcd-1.15.tar.gz
[root@centos ~]# cd vhci-hcd-1.15
[root@centos  vhci-hcd-1.15]# patch -p1 <full-path_to_patch-file>
[root@centos  vhci-hcd-1.15]# cd ..

4.将提取的 VHCI 源文件复制到 /usr/src 目录。

[root@centos ~]# cp -r vhci-hcd-1.15 /usr/src/usb-vhci-hcd-1.15

5.创建一个名为 dkms.conf 的文件,并将其放在 /usr/src/usb-vhci-hcd-1.15 目录中。

[root@centos ~]# cd /usr/src/usb-vhci-hcd-1.15 && vim dkms.conf

6.向 dkms.conf 文件添加以下内容。

PACKAGE_NAME="usb-vhci-hcd"
PACKAGE_VERSION=1.15
MAKE_CMD_TMPL="make KVERSION=$kernelver"
CLEAN="$MAKE_CMD_TMPL clean"
BUILT_MODULE_NAME[0]="usb-vhci-iocifc"
DEST_MODULE_LOCATION[0]="/kernel/drivers/usb/host"
MAKE[0]="$MAKE_CMD_TMPL"
BUILT_MODULE_NAME[1]="usb-vhci-hcd"
DEST_MODULE_LOCATION[1]="/kernel/drivers/usb/host"
MAKE[1]="$MAKE_CMD_TMPL"
AUTOINSTALL="YES"

7.在 dkms 中添加此 VHCI 驱动程序。

[root@centos  vhci-hcd-1.15]# dkms add usb-vhci-hcd/1.15

8.生成 VHCI 驱动程序。

[root@centos  vhci-hcd-1.15]# dkms build usb-vhci-hcd/1.15

9.安装 VHCI 驱动程序。

[root@centos  vhci-hcd-1.15]# dkms install usb-vhci-hcd/1.15

10.安装viewagent。

[root@centos ~]# ./install_viewagent.sh -U yes -A yes

注意

请注意这里我换成了CentOS操作系统作为演示。因为在Ubuntu(Debian系操作系统)下,DKMS会把模块放置到/updates/dkms目录下而不是dkms.conf中指定的/kernel/drivers/usb/host目录下,install_viewagent.sh脚本是检测/kernel/drivers/usb/host下是否有对应模块来判断是否安装了VHCI驱动。由此引发了环境检测程序上出现逻辑BUG。具体解决办法见《VMware Horizon Linux 云桌面 DKMS的BUG填坑记

本文参考链接

install_viewagent.sh 命令行选项

Horizon 7 for Linux 的系统要求

相关博文

VMware Horizon 虚拟化云桌面探索(一) - USB重定向

Vivado的加速之路:Launch runs on Remote hosts

1 篇评论

发表我的评论