先前为了更愉快的折腾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填坑记》
本文参考链接
相关博文
发表于 2021-06-09 下午 04:12:26
感谢老哥的踩坑记录。发现在centos8.3上,也出现了个坑,通过dkms安装。
官网说要给USB做签名驱动签名
https://docs.vmware.com/cn/VMware-Horizon/2103/linux-desktops-setup/GUID-E268BDBF-1D89-492B-8563-88936FD6607A.html?hWord=N4IghgNiBcIG4AsDGBLEBfIA
然后在签名的时候一直报错,文件未找到。
发现dkms吧usb-vhci-iocifc.ko和hcd默认输出到了
/lib/modules/`uname -r`/extra/
[root@localhost ~]# ls /lib/modules/`uname -r`/extra/
usb-vhci-hcd.ko.xz usb-vhci-iocifc.ko.xz
需要把2个东西放置到/lib/modules/`uname -r`/kernel/drivers/usb/host/
才能进行